单点登录

91 阅读2分钟

定义:

  • Single Sign-On, SSO
  • 是一种身份验证机制,用户登录一次,即可访问多个相互关联信任的应用系统,避免每个系统重复登录验证

产生原因和背景

  1. 多系统协作需求
    • 多个内部应用时,用户切换系统,重复登录导致体验极差,效率低下
  2. 安全与合规要求
    • 单点登录通过集中认证和统一凭证管理,增强安全性
  3. 用户痛点
    • 用户每个系用设置一个密码

关键问题

  • 单点登录的关键在于,如何让 sessionId (或 Token)在多个域中共享

核心原理

  • 核心思想
    • 通过一个中央认证中心(如CAS服务器)集中管理用户身份,其他系统信任该中心的验证结果
      • 负责验证用户身份,并生成分发全局唯一的身份令牌

SSO流程:

  • 流程概述
    • 未登录应用A -> 重定向认证中心获取code,浏览器写入cookie -> 带着code返回原应用 -> 原应用将code给到认证中心获取身份令牌 -> 登录成功
    • 关联应用B -> 拿着之前浏览器中的cookie -> 生成新的code -> 带着code返回原应用 -> 原应用将code给到认证中心获取身份令牌 -> 登录成功
  1. 访问应用
    • 未登录,则重定向至认证中心
  2. 认证中心检测登录态
    • 已登录,直接生成一个令牌(Token),并返回给应用
    • 未登录,展示登录页面,让用户手动登录
  3. 用户登录认证中心
    • 用户提交凭证,认证中心验证通过后:
      1. 在浏览器写入认证中心的Cookie
      2. 生成一个临时授权码(Code),重定向回应用,并附带该Code
  4. 应用A向认证中心换取令牌
    1. 应用通过Code向认证中心请求用户的身份令牌(如JWT)
    2. 认证中心验证Code有效性,返回令牌(包含用户ID,权限等)
  5. 应用建立本地会话
    • 应用解析令牌,创建本地会话(如Session或Cookie),用户登录成功
  6. 用户访问应用B
    • 应用B,未登录,重定向至认证中心
    • 认证中心通过浏览器已有的Cookie认证用户已登录,生成新的Code返回给应用B
    • 应用B重复 4~5 步骤,用户无需再次账号密码登录