SSO单点登录

参考:https://blog.csdn.net/u013905744/article/details/111225420

1. 什么是SSO

Single Sign On:SSO

web登录的本质是什么?

图片说明

如何增加状态/会话

图片说明

单个系统的登录

图片说明

扩展到多个系统,就是SSO

图片说明

2. 方案1:共享cookie,后台共享session

图片说明

spring session项目就是共享session,共享session放到redis中

图片说明

Session Cookie要种在Web应用的根域上,也就是说不同Web应用的根域必须相同,否则会有跨域问题。

3. 方案2:共享cookie,后台不共享session

图片说明
签名的方式来校验

图片说明

图片说明

SSO,要保存用户登录的会话关系。比如浏览器场景下,其是放到 session中。而在方案2场景下,其将会话状态存放在客户端(浏览器上)。

4. 方案3:使用独立的认证中心

CAS(central authentication service)

4.1 访问系统A(未登录)

图片说明

为什么 a.com 不直接访问认证中心,而要通过 302redirect 的方式呢?因为浏览器要获取一个认证中心的session

在认证中心创建一个session

setCookie 并且ticket

4.2 登录系统A(已登录)

图片说明

系统A要去认证中心验证,这个 ticket 是 sso.com 发出的。

其是通过一个全局的 cookie 和多个子系统的 cookie 来实现的

4.3 登录了系统A后,再来访问系统B

图片说明

返回给系统B的 ticket 与系统A的 ticket 不同,但代表的是同一个用户

4.4 访问系统B(已登录)

图片说明

此时就有三个cookie了

认证中心会把系统A和系统B注册,每次的ticket都是不同的

4.5 退出登录

图片说明

向认证中心发送一个注销请求,其需要查看这个用户注册过系统A和系统B,把这三个 session 全部注销掉。认证中心调用系统A的 logout 接口,将 session invalidate 掉,那么系统A中应该记录了 session 与用户相关的信息,可以标识出这是哪个用户的 session ,将相对应的 session invalidate 掉就可以了。