SSO(Single Sign-On,单点登录)是让用户在一个身份系统完成登录后,可以访问多个受信任应用的登录架构。
核心问题
如果每个系统都有独立账号和密码,用户生命周期、离职禁用、密码策略、MFA 和审计都会分散。SSO 把登录入口集中到 IdP,应用只接入标准协议并信任 IdP 的认证结果。
核心机制
SSO 并不是“所有应用共享同一个 cookie”。更准确地说,SSO 由两层会话组成:
| 会话 | 所在位置 | 作用 |
|---|---|---|
| IdP 会话 | IdP 域名下 | 证明用户已经在 IdP 登录 |
| 应用会话 | 各应用域名下 | 证明该应用已经接收并验证过登录结果 |
流程通常是:
- 用户访问应用 A,被重定向到 IdP。
- IdP 完成登录,应用 A 建立自己的本地 session。
- 用户再访问应用 B,也被重定向到 IdP。
- IdP 发现已有 IdP 会话,无需再次输入密码。
- 应用 B 验证 IdP 返回的 token,并建立自己的本地 session。
SSO 让多应用复用一次认证结果,但每个应用仍要维护自己的授权和会话过期策略。
工程用途
- 企业内部后台统一登录。
- SaaS 面向企业客户接入公司 IdP。
- 统一密码策略、MFA、风险登录和账号禁用。
- 统一审计用户从哪里、何时、用什么方式登录。
边界与常见坑
- SSO 不等于统一权限:进入多个系统不代表权限模型相同。
- 退出很难完全同步:IdP logout、应用 session、浏览器缓存和移动端 token 可能不一致。
- 高可用要求更高:IdP 故障可能影响所有依赖 SSO 的系统登录。
- SSO 缩写有歧义:在 C++ 里 SSO 也常指 Small String Optimization,本卡片只讨论单点登录。