Files
Qiniu/technical/sso.md
T

96 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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|协议对比与选型指南]]