3.3 KiB
3.3 KiB
tags, create time
| tags | create time | |||
|---|---|---|---|---|
|
2026-07-13 10:03 |
SSO 单点登录
概述
SSO(Single Sign-On,单点登录)是一种身份认证方案:用户只需登录一次,即可访问所有相互信任的应用系统。核心目标是统一身份源、降低登录摩擦、集中安全管控。
[!info] 什么时候需要 SSO? 当你的组织内有 3 个以上的应用需要用户登录时,就该认真考虑 SSO 了。否则每多一个系统就多一套账号密码,用户体验和安全管控都是灾难。
核心原理
SSO 的本质是一个认证委托模型:
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 |
详细文档见各子笔记:
关键概念
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参数防重放攻击