96 lines
3.3 KiB
Markdown
96 lines
3.3 KiB
Markdown
---
|
||
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|协议对比与选型指南]]
|