SSO单点登录异步任务编排的并发控制与锁设计 - 第1节

1.1 什么是单点登录

单点登录(Single Sign-On,SSO)是一种身份认证机制,允许用户使用一组凭证(如用户名/密码)登录一次,即可访问多个相互信任的应用系统,而无需在每个系统中重复输入凭证。

核心体验:一次认证,全网通行。用户只需在入口处完成一次登录,后续访问所有关联系统时,系统自动完成身份验证。

SSO 的典型工作流程

  1. 用户访问受保护资源:用户首次访问应用 A,应用 A 检测到用户未登录,将请求重定向到 SSO 认证中心。
  2. 认证中心验证身份:SSO 认证中心展示统一登录页面,用户输入凭证并提交。
  3. 生成全局票据:认证中心验证成功后,生成一个全局票据(Ticket),通常存储在 Cookie 或 Token 中。
  4. 票据下发与回跳:认证中心将票据附加在重定向 URL 中,将用户带回应用 A。
  5. 应用 A 验证票据:应用 A 向认证中心验证票据有效性,验证通过后建立本地会话,用户成功登录应用 A。
  6. 跨系统访问:用户访问应用 B 时,应用 B 检测到未登录,将请求重定向到认证中心。认证中心检测到用户已有全局票据,直接生成新票据并回跳,应用 B 验证后完成登录,用户无需再次输入密码。
SSO 单点登录核心流程 用户 应用 A 应用 B SSO 认证中心 全局票据管理 ① 访问 ② 重定向 ③ 登录页面 ④ 提交凭证 ⑤ 票据回跳 ⑥ 访问 ⑦ 验证票据 ⑧ 授权

1.2 SSO 的核心价值

价值维度 说明 业务收益
用户体验提升 用户只需记忆一组账号密码,登录一次即可访问所有关联系统 减少密码疲劳,降低登录摩擦,提升用户满意度
安全管控增强 认证集中管理,统一实施密码策略、多因素认证(MFA)、异常检测 降低弱密码风险,减少凭证泄露面,审计日志集中
运维效率提升 用户生命周期管理(创建/禁用/删除)在认证中心统一操作 减少 IT 支持成本,员工入职/离职流程自动化
系统解耦 各应用系统无需自建认证模块,通过标准协议对接认证中心 降低开发成本,新系统接入快速,架构灵活
合规与审计 所有认证行为集中记录,满足 SOX、GDPR 等合规要求 审计报告一键生成,违规行为可追溯
关键指标:实施 SSO 后,企业平均密码重置请求减少 60% 以上,员工登录效率提升 80%,IT 支持成本降低 30%-50%。

1.3 SSO 与 OAuth 2.0 的关系

SSO 和 OAuth 2.0 是两种不同层次的技术,常被混淆。SSO 是认证(Authentication)方案,解决“你是谁”的问题;OAuth 2.0 是授权(Authorization)框架,解决“你能做什么”的问题。两者在实践中经常结合使用。

对比维度 SSO OAuth 2.0
核心目标 一次登录,访问多个系统 第三方应用获取有限资源访问权限
本质 认证(Authentication) 授权(Authorization)
输出产物 票据(Ticket)、会话 Token 访问令牌(Access Token)、刷新令牌(Refresh Token)
典型协议 SAML、CAS、Kerberos OAuth 2.0、OpenID Connect
用户交互 用户直接面对认证中心 用户授权第三方应用访问自己的资源
常见场景 企业内网门户、多系统办公平台 登录、GitHub 授权、API 访问控制
常见误区:OAuth 2.0 本身不提供身份认证功能。OpenID Connect(OIDC)是在 OAuth 2.0 之上构建的身份认证层,常被用于实现 SSO。在实际架构中,OIDC + OAuth 2.0 的组合是当前最主流的 SSO 实现方案之一。

SSO 与 OAuth 2.0 的协作关系

在现代化架构中,SSO 通常基于 OAuth 2.0 + OpenID Connect 实现:

  • OpenID Connect 在 OAuth 2.0 的授权流程中增加 id_token(JWT 格式),用于传递用户身份信息。
  • 认证中心 作为 OAuth 2.0 的授权服务器,同时承担身份提供者(IdP)角色。
  • 各应用系统 作为 OAuth 2.0 的客户端,通过标准流程获取 id_token 和 access_token。
  • 用户 在认证中心完成一次登录,后续所有客户端通过令牌验证实现免登录访问。
SSO 与 OAuth 2.0 / OIDC 协作架构 用户 应用客户端 应用客户端 应用客户端 认证中心 OAuth 2.0 + OIDC 身份提供者 (IdP) 登录请求 授权请求 id_token + access_token 令牌回传 免登录访问

1.4 SSO 常见实现模式

根据架构风格和协议选择,SSO 主要有以下四种实现模式:

模式 核心协议 票据/令牌格式 适用场景 优点 缺点
基于 Cookie 的 SSO 自定义 / 共享域名 Session Cookie 同域名下的子系统 实现简单,无需额外协议 跨域困难,安全性较低
基于 SAML 的 SSO SAML 2.0 SAML Assertion (XML) 企业级应用、跨组织联邦 成熟稳定,支持跨域 XML 解析开销大,配置复杂
基于 CAS 的 SSO CAS 协议 Ticket Granting Ticket (TGT) + Service Ticket (ST) 高校、开源社区 轻量级,协议清晰 功能相对单一
基于 OIDC 的 SSO OpenID Connect (OAuth 2.0 + OIDC) ID Token (JWT) + Access Token 互联网应用、移动端、微服务 标准化、轻量、支持现代架构 依赖 OAuth 2.0 理解成本

模式对比与选型建议

  • 同域名场景:优先考虑基于 Cookie 的 SSO,实现成本最低。
  • 企业级跨域联邦:SAML 2.0 是事实标准,尤其在 Salesforce、Workday 等 SaaS 集成中广泛使用。
  • 轻量级内部系统:CAS 协议简单可靠,适合高校和中小型团队。
  • 现代互联网/移动端/微服务:OIDC + OAuth 2.0 是最佳选择,支持 SPA、移动端、服务间认证。
趋势:根据 2024 年行业报告,OIDC 已成为新系统首选的 SSO 协议,占比超过 65%。SAML 在存量企业级系统中仍占主导,但新项目已逐步向 OIDC 迁移。

基于 OIDC 的 SSO 实现流程(标准模式)

  1. 用户访问客户端:用户点击“登录”按钮,客户端构造 OAuth 2.0 授权请求,包含 response_type=code、client_id、redirect_uri、scope=openid profile。
  2. 重定向到认证中心:客户端将用户浏览器重定向到认证中心的授权端点。
  3. 用户认证:认证中心验证用户身份(若已有会话则跳过),展示同意页面(首次授权时)。
  4. 返回授权码:认证中心生成授权码(Authorization Code),通过重定向返回给客户端。
  5. 令牌交换:客户端使用授权码 + client_secret 向认证中心的令牌端点请求令牌。
  6. 返回 ID Token 和 Access Token:认证中心验证授权码后,返回 id_token(JWT 格式,包含用户身份信息)和 access_token。
  7. 验证 ID Token:客户端验证 id_token 的签名、iss、aud、exp 等字段,提取用户信息。
  8. 建立本地会话:客户端创建本地会话,用户登录成功。
  9. 后续访问其他客户端:用户访问其他客户端时,重复步骤 1-2,但认证中心检测到用户已有会话,直接返回授权码,无需再次输入密码。
安全最佳实践:授权码模式(Authorization Code Flow)是 OIDC 推荐的标准流程。PKCE(Proof Key for Code Exchange)扩展可防止授权码拦截攻击,在移动端和 SPA 中必须使用。