SSO 单点登录
实现在多个系统中,用户只需一次登录,各个系统即可感知该用户已经登录
参考文章:https://blog.csdn.net/qq_41913971/article/details/122609233
sso(Single Sign On)
1、单系统登录
一般的登录授权功能,是通过服务器 tomcat 上的 session 和存储在浏览器 cookie 上的 sessionId 进行校验,在每次请求中通过 sessionId 在 session 中查询是否存在用户的信息,从而校验是否登录

2、单点登录由来
但是增加新的服务器之后,不同的服务器之间的sessionId是不一样的,可能在A服务器上已经登录成功了,能从服务器的session中获取用户信息,但是在B服务器上却查不到session信息,只好退出来继续登录,结果A服务器中的session因为超时失效,登录之后又被强制退出来要求重新登录

3、单点登录实现
单点登录的本质就是在多个应用系统中共享登录状态,如果用户的登录状态是记录在 Session 中的,要实现共享登录状态,就要先共享 Session 和 Cookie
共享 session
使用 redis 存储 session 信息表,即将用户信息存放在 redis 中,并设置过期时间,这样不同的系统或应用都可以从 redis 中读取到用户登录信息
共享 cookie
a. 如果不同系统都用同一个顶级域名,例如:app1.a.com、app2.a.com,则可以在设置 cookie 的时候将 domain 设置为顶级域名 a.com,这样所有子域名的系统都可以访问到这个 cookie 的内容
b. 对于不同域名的系统,可以使用浏览器本地缓存,将Token保存在SessionStorage中
CAS 原理
CAS(Central Authentication Service)原理
通过将认证中心独立开来,成为一个系统服务,用作登录和认证功能,即解决 session 的跨域问题,将用户信息存放在这个系统中,用户访问系统1的时候就会重定向到认证中心,在认证中心中登录之后,返回用户 sessionId 存在浏览器中,并且携带 token 重定向到 系统1 上,系统1 在使用 token 去认证中心校验

而当用户访问 系统2 时,当用户未登录时,就会跳转到 认证中心 中,认证中心页面存在对应 cookie,使用 sessionId 获取 token 并重定向到 系统2 中,系统2 再去认证中心校验 token 是否正确,并完成认证功能

实现方式
采用 CAS 方式,使用统一认证系统,采用 jwt 实现跨域认证问题
参考文章:https://www.cnblogs.com/xieqing/p/6519907.html
访问系统A

访问系统B

- 本文链接:https://lxjblog.gitee.io/2023/07/03/SSO%E5%8D%95%E7%82%B9%E7%99%BB%E5%BD%95/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。