为什么须要单点登录
单点登录 SSO(Single Sign On)说得简略点就是在一个多零碎共存的环境下,用户在一处登录后,就不必在其余零碎中登录,也就是用户的一次登录能失去其余所有零碎的信赖。
单点登录在大型网站里应用得十分频繁,例如,阿里旗下有淘宝、天猫等网站,还有背地的成千盈百的子系统,用户一次操作或交易可能波及到几十个子系统的合作,如果每个子系统都须要用户认证,不仅用户会疯掉,各子系统也会为这种反复认证受权的逻辑搞疯掉。
所以,单点登录要解决的就是,用户只须要登录一次就能够拜访所有相互信任的利用零碎。
单点登录的起源
1. 晚期 web 单零碎利用
晚期咱们开发 web 利用都是所有的包放在一起打成一个 war 包放入 tomcat 容器来运行的, 所有的性能, 所有的业务, 后盾治理, 门户界面, 都是由这一个 war 来反对的, 这样的单利用, 也称之为巨石利用, 因为非常不好扩大和拆分。
在巨石利用下,用户的登录以及权限就显得非常简略,当浏览器向服务器发送登录申请时,验证通过之后,会将用户信息存入 seesion 中,而后服务器会生成一个 sessionId 放入 cookie 中,随后返回给浏览器。
大抵能够用下图来示意:
验证登录的这个会话就是 session, 保护了用户状态, 也就是所谓的 HTTP 有状态协定, 咱们常常能够在浏览器中看到 JSESSIONID, 这个就是用来维持这个关系的 key。
单点登录 SSO 的实现原理与计划详解 -mikechen 的互联网架构
2. 分布式集群部署
因为网站的访问量越来也大,单机部署曾经是微小瓶颈,所以才有了起初的分布式集群部署。
例如:如果引入集群的概念, 单利用可能重新部署在 3 台 tomcat 以上服务器, 应用 nginx 来实现反向代理。
然而减少新的服务器之后,不同的服务器之间的 sessionId 是不一样的,可能在 A 服务器上曾经登录胜利了,能从服务器的 session 中获取用户信息,然而在 B 服务器上却查不到 session 信息,只好退出来持续登录,后果 A 服务器中的 session 因为超时生效,登录之后又被强制退出来要求从新登录。
所以不得不思考多服务器之间的 session 数据统一的问题,这就是单点登录的最早起源。
单点登录的实现形式
单点登录的实质就是在多个利用零碎中共享登录状态,如果用户的登录状态是记录在 Session 中的,要实现共享登录状态,就要先共享 Session。
所以实现单点登录的关键在于,如何让 Session ID(或 Token)在多个域中共享。
1. 同域下的单点登录
一个企业个别状况下只有一个域名,通过二级域名辨别不同的零碎。
比方我有个域名:mikechen.cc,同时有两个业务零碎别离为:
blog.mikechen.cc
video.mikechen.cc
咱们要做单点登录(SSO),须要一个登录零碎,叫做:sso.mikechen.cc。
咱们只有在 sso.mikechen.cc 登录,blog.mikechen.cc 和 video.mikechen.cc 也登录了。
实现形式:其实这里就是利用了 二级域名 写 一级域名的 Cookie。sso.mikechen.cc 登录当前,能够将 Cookie 的域设置为顶域,即.mikechen.cc,这样所有子域 blog.mikechen.cc 和 video.mikechen.cc 的零碎都能够拜访到顶域的 Cookie。
此种实现形式比较简单,但不反对跨主域名, 局限性限于一级域名是一样的。
2. 不同域下的单点登录
同域下的单点登录是巧用了 Cookie 顶域的个性, 如果是不同域呢,比方:上面三个是不同域的
mikechen1.cc
mikechen2.cc
mikechen3.cc
实现形式:咱们能够部署一个 SSO 认证核心, 认证核心就是一个专门负责解决登录申请。
所有的申请(登录、退出、获取用户信息、以后用户状态)都申请 sso 零碎,sso 系统维护用户信息。
此种实现形式绝对简单,反对跨域,扩展性好,是单点登录的规范做法。
基于 SSO 认证核心的开源我的项目代表:CAS,其中 CAS 是 Central Authentication Service,即地方认证服务,下图是 CAS 的根本过程:
单点登录 SSO 的实现原理与计划详解 -mikechen 的互联网架构
以上就是基于单点登录的介绍!
-END-
对于作者:mikechen,十余年 BAT 架构教训,资深技术专家,曾任职阿里、淘宝、百度。
欢送关注集体公众号:mikechen 的互联网架构,十余年 BAT 架构教训倾囊相授!
在公众号菜单栏对话框回复【架构 】关键词,即可查看我 原创的 300 期 +BAT 架构技术系列文章与 1000+ 大厂面试题答案合集。