SSO(Single Sign On)单点登录系统。现在很多系统都由多个子系统组成,为了统一登录,保证登录一次,所有子系统都能访问,提升用户体验,SSO方案由此而生。
SSO原理
SSO系统是单独部署的一套认证系统,独立于所有子系统,包含登录认证、授权、用户管理功能。用户需要登录任意业务子系统时,都被重定向到认证中心,通过认证中心登录认证后,就会设置一个全局会话并重定向到子系统。子系统与验证中心通信验证Ticket的真伪,如果Ticket为真则将受保护资源返回给用户。
SSO流程
用户登录流程
- 用户浏览器访问系统A受保护资源,cookie中sessionID(局部会话)
- 系统A检测是否存在局部会话,如果存在则直接返回受保护资源
- 系统A将请求重定向到认证中心(重定向时需要指定callback)
- 认证中心检测是否存在全局会话(cookie中TGC是否存在)
** 4.1)如果全局会话存在,直接跳转步骤8
** 4.2)如果全局会话不存在,跳转步骤5
- 认证中心检测是否存在全局会话(cookie中TGC是否存在)
- 认证中心显示登录页面
- 用户在登录页面填好用户名和密码后,提交
- 认证中心检测用户名和密码是否匹配
- 认证中心重定向到系统A(参数附带ticket=TGC)
- 系统A将ticket提交到认证中心验证
- 认证中心返回ticket验证结果
- 如果ticket真实,系统A返回请求的资源;如果ticket假的,重复步骤3。
注:1、局部会话是指浏览器与子系统之间的会话,可以通过cookie或sessionID实现。 2、全局会话是指浏览器与认证中心之间的会话,通过TGC(Ticket Granting Cookie),TGC实际上是CAS系统中的一个概念,用于保存TGT(Ticket Granting Ticket)的ID,也就是说在传输过程中,都是传输的TGT的ID。
参考
app-sso 实现原来是怎样的?
《SSO CAS单点系列》之 实操!轻松玩转SSO CAS就这么简单(相识篇)
CAS实现单点登录SSO执行原理探究(终于明白了)
CAS 之自定义登录页实践
单点登录(SSO)的设计与实现