单点登录
定义:
- Single Sign-On, SSO
- 是一种
身份验证机制,用户登录一次,即可访问多个相互关联信任的应用系统,避免每个系统重复登录验证
产生原因和背景
- 多系统协作需求
- 多个内部应用时,用户切换系统,重复登录导致体验极差,效率低下
- 安全与合规要求
- 用户痛点
关键问题
- 单点登录的关键在于,如何让 sessionId (或 Token)在多个域中共享
核心原理
- 核心思想
- 通过一个中央认证中心(如CAS服务器)集中管理用户身份,其他系统信任该中心的验证结果
SSO流程:
- 流程概述
- 未登录应用A -> 重定向认证中心获取code,浏览器写入cookie -> 带着code返回原应用 -> 原应用将code给到认证中心获取身份令牌 -> 登录成功
- 关联应用B -> 拿着之前浏览器中的cookie -> 生成新的code -> 带着code返回原应用 -> 原应用将code给到认证中心获取身份令牌 -> 登录成功
- 访问应用
- 认证中心检测登录态
- 已登录,直接生成一个令牌(Token),并返回给应用
- 未登录,展示登录页面,让用户手动登录
- 用户登录认证中心
- 用户提交凭证,认证中心验证通过后:
- 在浏览器写入认证中心的Cookie
- 生成一个临时授权码(Code),重定向回应用,并附带该Code
- 应用A向认证中心换取令牌
- 应用通过Code向认证中心请求用户的身份令牌(如JWT)
- 认证中心验证Code有效性,返回令牌(包含用户ID,权限等)
- 应用建立本地会话
- 应用解析令牌,创建本地会话(如Session或Cookie),用户登录成功
- 用户访问应用B
- 应用B,未登录,重定向至认证中心
- 认证中心通过浏览器已有的Cookie认证用户已登录,生成新的Code返回给应用B
- 应用B重复 4~5 步骤,用户无需再次账号密码登录