单点登陆SSO的技术原理

定义:在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。

例子:比如淘宝和天猫,只要登陆其中一个系统,再进入另一个系统就不需要登陆。

核心问题:就以淘宝和天猫为例,存在两个问题:

  1. 淘宝和天猫的域名不相同,且 Cookie 不支持跨域使用
  2. 淘宝和天猫的服务器肯定也不是同一个,session 无法共享。

解决方案1

  • 思路:将 Cookie 所在域设置为顶级域名;Session 的存储在多个服务器共享的存储设备上
  • 缺点:相互信任的系统并不存在共同的顶级域名,本方案就无法使用。
    PS : 本方案并不是真正意义上 SSO 实现

解决方案2:

  • 思路:将认证功能独立形成 CAS(Central Authentication Service),访问各个相互信任的系统时,都重定向到 CAS 进行身份验证。
  • 实现流程,简短描述:
    1. 用户访问 A 系统;A 系统重定向到 CAS 中
    2. 由于用户没登陆,重定向访问 CAS 是没携带数据,当 CAS 判断用户未登陆,则返回登陆页面
    3. 用户登陆,CAS 验证后生成 session、cookie和 token,并重定向到 A 中(其中cookie和ticket保存在客户端中)
    4. 用户重定向访问 A ,此时会携带 token。
    5. A 会将 token 交给 CAS 验证。验证通过后,A 生成session和cookie。【此时A登陆成功,而后与 A 交互,依靠 A 生成的 session和cookie】
    6. 用户访问互相信任的 B 时,B 也会重定向到 CAS
    7. 由于之前在 CAS 下设置了 cookie,本次访问 CAS 会携带 cookie
    8. CAS 根据 cookie 验证通过后,生成一个新的 token 返回给用户,并重定向到 B
    9. 用户重定向访问 B 并携带该 token
    10. B 去 CAS 验证 token。验证通过后,B 生成 session 和 cookie,而后用户和 B 的交互依靠这对 session 和 cookie。
  • 实现流程,详细描述:


    基于 CAS 实现的 SSO 原理

参考:
[1] 单点登录(SSO)看这一篇就够了-云栖社区-阿里云
[2] 什么是单点登录(SSO) - 掘金

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容