--- tags: [sso, auth, architecture] create time: 2026-07-13 10:03 --- # SSO 单点登录 ## 概述 SSO(Single Sign-On,单点登录)是一种身份认证方案:用户只需登录一次,即可访问所有相互信任的应用系统。核心目标是**统一身份源、降低登录摩擦、集中安全管控**。 > [!info] 什么时候需要 SSO? > 当你的组织内有 3 个以上的应用需要用户登录时,就该认真考虑 SSO 了。否则每多一个系统就多一套账号密码,用户体验和安全管控都是灾难。 ## 核心原理 SSO 的本质是一个**认证委托**模型: ```mermaid sequenceDiagram participant U as 用户 participant App as 业务应用 participant IdP as 身份提供商 (IdP) U->>App: 1. 访问受保护资源 App->>IdP: 2. 重定向到登录页 U->>IdP: 3. 输入凭证 IdP-->>U: 4. 颁发 SSO Token / Session IdP->>App: 5. 回调 + 认证凭证 App->>IdP: 6. 验证凭证有效性 IdP-->>App: 7. 返回用户身份信息 App-->>U: 8. 授予访问权限 ``` 三个核心角色: | 角色 | 全称 | 职责 | |------|------|------| | **User** | End User | 发起请求的终端用户 | | **SP** | Service Provider(服务提供方) | 业务应用,依赖 IdP 做认证 | | **IdP** | Identity Provider(身份提供商) | 统一认证中心,管理用户身份 | > [!tip] SP vs IdP > 简单记忆:IdP 知道「你是谁」,SP 知道「你能干什么」。SP 把「你是谁」这件事委托给了 IdP。 ## 主流协议概览 | 协议 | 时代 | 传输方式 | 典型场景 | |------|------|----------|----------| | CAS | 2000+ | 浏览器重定向 + Ticket | 企业内部门户、高校系统 | | SAML 2.0 | 2005+ | XML + 浏览器重定向 | 企业级 SSO、SaaS 集成 | | OAuth 2.0 | 2012+ | HTTPS API | 第三方授权、API 访问控制 | | OIDC | 2014+ | HTTPS API (JWT) | 现代 Web / 移动端 / SPA | 详细文档见各子笔记: - [[sso/sso-oauth2|OAuth 2.0 授权码模式]] - [[sso/sso-oidc|OpenID Connect (OIDC)]] - [[sso/sso-saml|SAML 2.0]] - [[sso/sso-cas|CAS 协议]] - [[sso/sso-comparison|协议对比与选型指南]] ## 关键概念 ### Session 与 Token 的区别 | 维度 | Session-Cookie | Token (JWT) | |------|---------------|-------------| | 存储位置 | 服务端 | 客户端 | | 扩展性 | 需要共享 Session Store | 天然无状态 | | 跨域 | Cookie 受同源策略限制 | Header 传递,无跨域问题 | | 撤销 | 删除 Session 即可 | 需要黑名单或短过期时间 | ### SSO 的两种实现思路 **1. 共享 Session(Cookie Domain 共享)** IdP 登录后写入一个顶级域的 Cookie,所有 SP 通过访问 IdP 的验证端点来确认登录状态。实现简单但受限于同主域。 **2. 分布式 Token(标准协议方式)** IdP 颁发 Token,SP 独立验证。跨域、跨平台无障碍,是当前主流方案。 > [!warning] 安全要点 > - 始终使用 HTTPS,Token 一旦泄露等同于身份被盗 > - Token 有效期不宜过长,Access Token 建议 5-30 分钟 > - 使用 `state` 参数防 CSRF,`nonce` 参数防重放攻击 ## 关联笔记 - [[sso/sso-oauth2|OAuth 2.0 授权码模式]] - [[sso/sso-oidc|OpenID Connect (OIDC)]] - [[sso/sso-saml|SAML 2.0]] - [[sso/sso-cas|CAS 协议]] - [[sso/sso-comparison|协议对比与选型指南]]