单点登录(SSO)全景解析:原理、协议对比

1. 引言:为什么 SSO 是现代企业的"身份基石"?

在传统的企业 IT 环境中,用户每访问一个新系统(如 ERP、邮件、OA)都需要输入一次账号密码。这种"身份孤岛"现象带来了显著的现实痛点

  • 用户体验差:记忆数十个复杂密码导致"密码疲劳",频繁登录降低工作效率。
  • 管理成本高:员工入职、离职或调岗时,管理员需在几十个系统中重复同步账号权限,极易出错。
  • 安全风险剧增:为了好记,用户倾向于在所有系统使用弱密码;离职员工账号若未及时清理(孤儿账号),将成为黑客入侵的天然跳板。

单点登录(Single Sign-On, SSO) 的出现解决了上述问题。它允许用户只需在单一入口通过一次身份验证,即可获得访问所有相互信任系统的授权。作为 IAM(Identity and Access Management,身份认证与访问管理)的核心,SSO 不仅是效率工具,更是企业安全的第一道防线。


2. SSO 核心概念与基本原理

在深入协议前,我们必须统一语言。SSO 的本质是建立信任链条

2.1 核心参与者

  • IdP (Identity Provider,身份提供方):认证中心,负责存储用户信息、执行认证(如校验密码、MFA)并签发凭证。
  • SP / RP (Service Provider / Relying Party,服务提供方/依赖方):最终用户要访问的应用系统,它信任 IdP 提供的认证结果。
  • Principal (主体):通常指试图访问资源的用户。

2.2 核心组件

  • Session (会话):用户与 IdP 之间建立的认证状态。
  • Token / Ticket (令牌/票据):一种证明身份的"数字通行证",由 IdP 签发,SP 校验。
  • Trust Domain (信任域):共享认证信息的系统集合。

2.3 基本逻辑流

  1. 用户访问 SP,SP 发现用户未登录。
  2. SP 将用户重定向(Redirect)至 IdP。
  3. 用户在 IdP 完成登录,IdP 生成票据并通过浏览器传回 SP。
  4. SP 拿着票据去 IdP 验证合法性(或通过公钥自验)。
  5. 验证通过,SP 建立本地会话。

3. 主流 SSO 协议深度对比

不同的业务场景决定了协议的选择。

维度 CAS (v2/v3) SAML 2.0 OIDC (OAuth 2.0 + OpenID) Kerberos
定位 经典 Web SSO 协议 企业级联合身份认证 现代互联网身份层 局域网/域控认证
票据形式 Ticket (ST/TGT) XML Assertion JSON Web Token (JWT) 二进制 Ticket
传送方式 浏览器重定向 + 后端校验 浏览器 POST (XML) 授权码流/隐式流 SPNEGO/GSSAPI
适用场景 传统高校、企业内部 Web 跨组织 B2B、SaaS 继承 移动端、SPA、API 保护 Windows 域环境
安全特性 依赖后端验证 XML 签名与加密 非对称加密签名、PKCE 对称加密、防重放
复杂度 中等 高(XML 处理复杂) 中(对开发者友好) 极高(需特定客户端支持)
移动端支持 较差 原生支持(极佳) 基本无

4. 经典协议流程深度解析

4.1 CAS (Central Authentication Service) 流程

CAS 是早期的行业标准,其核心是多级票据模型。

  • TGT (Ticket Granting Ticket):存储在 IdP Cookie 中,代表用户的 SSO 会话。
  • ST (Service Ticket):IdP 发给 SP 的一次性票据。
  • PGT (Proxy Granting Ticket):用于代理访问,解决 A 系统调用 B 系统时的身份透传。

登录时序:

  1. 用户访问 App -> 302 重定向到 CAS Server。
  2. CAS 校验 TGT(若无则要求登录)。
  3. CAS 产生 ST,重定向回 App:https://app.com?ticket=ST-xxxx
  4. 后端校验 :App 后端携带 ST 请求 CAS serviceValidate 接口。
  5. CAS 返回用户信息 XML,App 建立本地会话。

4.2 SAML 2.0 (Security Assertion Markup Language)

SAML 最大的特点是**"去中心化验证"**。SP 不需要像 CAS 那样再回连 IdP 校验,而是通过预先交换的公钥直接解析 XML 签名。

  • SP-Initiated (SP 发起) :用户先访问应用,应用生成 AuthnRequest 发给 IdP。
  • IdP-Initiated (IdP 发起) :用户先登录门户,点击应用图标,IdP 直接推给应用一个 SAMLResponse

4.3 OIDC (OpenID Connect)

OIDC 是在 OAuth 2.0 授权协议之上增加的身份层。

核心流程(授权码流 + PKCE):

  1. Code 交换 :App 请求 /authorize 获取 code
  2. PKCE 加固 :移动端使用 code_challenge 防止 code 被截获。
  3. Token 兑换 :App 在后端用 code 换取 id_token (身份) 和 access_token (授权)。
go 复制代码
// OIDC Token 校验伪代码 (Golang)
func validateIDToken(rawIDToken string) (*claims, error) {
    // 1. 验证签名 (RS256)
    // 2. 验证 iss (发行人) 是否匹配
    // 3. 验证 aud (客户端ID) 是否匹配
    // 4. 验证 exp (过期时间)
    return parseJWT(rawIDToken)
}

5. 安全风险与加固清单

SSO 是一把双刃剑:一旦 IdP 失陷,全线崩盘。

5.1 传输与会话安全 (Critical)

  • TLS & HSTS:强制全站 HTTPS。开启 HSTS (HTTP Strict Transport Security) 防止降级攻击。
  • Cookie 属性
  • HttpOnly: 防止 XSS 窃取。
  • Secure: 仅 HTTPS 传输。
  • SameSite=Lax/Strict: 防范 CSRF 攻击。
  • Partitioned (CHIPS): 应对现代浏览器的第三方 Cookie 限制。

5.2 票据管理 (High)

  • 短生命周期 :ST 或 Code 必须是一次性且有效期极短(通常 < 5分钟)。
  • Token Rotation (刷新令牌滚动):Refresh Token 使用一次后即废弃并下发新的,防止长期令牌泄露。

5.3 来源校验 (High)

  • 重定向白名单 :这是最常见的漏洞(Open Redirect)。必须在 IdP 端严格校验 redirect_uri,禁止使用通配符。
  • Referer/Origin 校验:防止跨站请求伪造。

5.4 纵深防御 (Medium)

  • MFA (多因素认证):针对高敏感应用强制触发 TOTP 或 FIDO2 校验。
  • 异常行为分析:同一账号在 1 分钟内异地登录(Impossible Travel)时强制阻断并告警。

6. 总结与 Checklist

SSO 的成功实施不仅在于选对协议,更在于后期的精细化运维。

运维 Checklist

  • 元数据管理:SAML 证书是否即将在 30 天内过期?
  • 日志审计 :是否记录了所有 login_successlogin_failed 以及 token_exchange 日志?
  • SLO (Single Log-Out):用户注销 IdP 时,子系统是否能同步清理会话?(这是技术难点,建议配合后端短 Session 机制)。
  • 监控告警:IdP 接口响应延迟是否超过 500ms?
  • 灾备:IdP 挂了是否有"后门"账号或降级方案确保核心业务可用?
相关推荐
爱吃橘子橙子柚子2 天前
3CPU性能排查总结(超详细)【Linux性能优化】
运维·cpu
舒一笑4 天前
程序员效率神器:一文掌握 tmux(服务器开发必备工具)
运维·后端·程序员
NineData4 天前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
梦想很大很大5 天前
拒绝“盲猜式”调优:在 Go Gin 项目中落地 OpenTelemetry 链路追踪
运维·后端·go
Sinclair5 天前
内网服务器离线安装 Nginx+PHP+MySQL 的方法
运维
叶落阁主5 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
茶杯梦轩5 天前
从零起步学习RabbitMQ || 第二章:RabbitMQ 深入理解概念 Producer、Consumer、Exchange、Queue 与企业实战案例
服务器·后端·消息队列
甲鱼9296 天前
MySQL 实战手记:日志管理与主从复制搭建全指南
运维
YuMiao7 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
碳基沙盒8 天前
OpenClaw 多 Agent 配置实战指南
运维