chat
详细展开介绍一下 SSO
在有了 UMS(用户管理系统) 作为统一用户基础之后,下一步自然就是构建 SSO(Single Sign-On,单点登录系统) —— 企业身份体系的“统一认证层”。
这一层是企业内部 所有系统的入口,也是从“多个独立系统”走向“统一身份中台”的关键步骤。
下面我来系统、深入地讲清楚 SSO 的原理、架构、关键模块、协议设计、Token 策略、以及和 UMS/Passport 的关系。
🧩 一、SSO 是什么?(定义与目标)
SSO(Single Sign-On,单点登录) 的核心目标是:
用户在企业任意一个系统中登录一次后,便可以无缝访问公司内其他系统,而无需重复输入用户名和密码。
✅ 简单理解
- 没有 SSO:每个系统都要登录一次。
 - 有了 SSO:登录一次,全网通行。
 
🧭 二、SSO 的核心价值
| 价值方向 | 说明 | 
|---|---|
| 💡 用户体验 | 只需登录一次,不重复输入密码 | 
| 🔒 安全合规 | 统一身份认证,集中风控、审计、登出 | 
| ⚙️ 架构统一 | 各系统通过统一认证标准接入 | 
| 🧰 可扩展性 | 支持接入外部系统、第三方身份 | 
| 🧠 管理效率 | 集中管理会话、Token、用户状态 | 
🧠 三、SSO 的核心思路(原理)
我们从“流程”层面先看:
🧾 单点登录流程(基础版)
- 用户访问子系统 A(如 OA)
 - 系统 A 发现用户未登录 → 跳转到 SSO 登录页
 - 用户在 SSO 登录页输入账号密码
 - SSO 认证成功,生成 Token / Ticket 并写入 Cookie(绑定 SSO 域)
 - SSO 重定向回系统 A,并携带授权票据(如 
code或ticket) - 系统 A 调用 SSO 的验证接口 
/validate,验证成功后建立本地会话 - 后续访问系统 B 时,B 发现同域 Cookie 中已有登录状态 → 直接放行(或用 Token 免密登录)
 
✅ 效果:登录一次,全系统共享登录态。
🧩 四、SSO 的核心组成模块
一个完整的 SSO 系统通常由以下几个部分组成👇:
1️⃣ 认证中心(Auth Server)
功能:负责统一的登录、注册、密码找回、Token 签发。
| 功能点 | 说明 | 
|---|---|
| 登录页(/login) | 用户登录入口 | 
| 登出接口(/logout) | 注销全局登录状态 | 
| 授权码签发(/authorize) | OAuth2 标准接口 | 
| Token 签发(/token) | Access Token、ID Token、Refresh Token | 
| 用户信息接口(/userinfo) | 获取当前登录用户信息 | 
| 统一会话管理 | 用户登录状态统一缓存(Redis / DB) | 
⚙️ 可直接复用:Spring Authorization Server / Keycloak / Auth0。
2️⃣ 应用系统(Client / Service Provider)
功能:依赖 SSO 的系统(如 CRM、OA、Wiki、BI)。
| 关键点 | 说明 | 
|---|---|
| 注册为 SSO 客户端(client_id + secret) | |
| 登录时重定向到 SSO 登录页 | |
登录后通过 code → token 完成授权 | 
      |
| 本地维护短期 Session | |
| 可通过 SDK 验证用户 Token | 
3️⃣ Token 管理模块
负责登录凭证的生成、刷新与验证。
| 类型 | 说明 | 
|---|---|
| Access Token | 短期访问凭证(通常有效期15~60分钟) | 
| Refresh Token | 用于刷新 Access Token | 
| ID Token | (OpenID Connect)包含用户身份声明 | 
| Session Token / Ticket | Web 场景下绑定 Cookie 的会话凭证 | 
⚙️ 建议:
- 后端系统用 JWT(无状态)
 - 前端 Web 登录用 Session Ticket(可统一登出)
 
4️⃣ 单点登出(Single Logout)
SSO 的另一个关键特性:退出一个系统,所有系统都退出。
实现方式:
| 方式 | 说明 | 
|---|---|
| 前端方式 | 各系统的 iframe 监听登出事件 | 
| 后端方式 | SSO 服务主动调用各系统的 /logout 接口 | 
    
| 混合方式 | 前后端联动触发注销 | 
✅ 推荐:后端回调方式更安全可靠。
5️⃣ 会话与安全控制模块
| 功能 | 说明 | 
|---|---|
| 会话持久化 | 用户登录状态记录(session_id、client_id、expires) | 
| 黑名单机制 | 被登出的 Token 加入黑名单 | 
| 并发登录控制 | 限制多终端登录 | 
| 审计日志 | 登录日志、设备、IP、时间、结果 | 
⚙️ 五、SSO 常用协议与标准
| 协议 | 场景 | 说明 | 
|---|---|---|
| OAuth 2.0 | 授权协议 | 常用于应用间授权(API级) | 
| OpenID Connect (OIDC) | 基于 OAuth2 扩展的身份认证协议 | 企业 SSO 主流 | 
| SAML 2.0 | XML 协议,常用于传统企业系统 | |
| JWT (JSON Web Token) | Token 格式 | 携带身份信息 | 
| LDAP / Kerberos | 内网认证 | 老式企业系统常用 | 
💡 推荐:现代企业统一采用 OpenID Connect + OAuth2.0 + JWT。
🏗️ 六、SSO 的系统架构
              ┌────────────────────────────┐
              │         用户浏览器          │
              └─────────────┬──────────────┘
                            │
                            ▼
                 ┌────────────────────┐
                 │  SSO 认证中心(Auth Server) │
                 │  - 登录页 (/login)          │
                 │  - 授权码 (/authorize)      │
                 │  - Token (/token)           │
                 │  - 用户信息 (/userinfo)     │
                 │  - 登出 (/logout)           │
                 └───────────┬────────────────┘
                             │
      ┌──────────────────────┼────────────────────────┐
      ▼                      ▼                        ▼
┌────────────┐       ┌────────────┐          ┌────────────┐
│  系统A CRM │       │  系统B OA │          │  系统C BI │
│  (Client)  │       │  (Client) │          │  (Client)  │
└────────────┘       └────────────┘          └────────────┘
🔐 七、登录凭证设计(Token 策略)
1️⃣ Token 类型建议
| 类型 | 有效期 | 用途 | 
|---|---|---|
| Access Token | 15-60 分钟 | 调接口凭证 | 
| Refresh Token | 7-30 天 | 刷新 Access Token | 
| ID Token | 同 Access Token | 携带用户信息 | 
| Session Cookie | 浏览器短期登录态 | Web 登录维持 | 
2️⃣ 签发与验证逻辑
- 签发: SSO Auth Server 生成 JWT,签名(RSA / HMAC)。
 - 验证: 各系统通过 SDK 校验 JWT 签名(公钥验证)。
 - 刷新: Access Token 过期 → 用 Refresh Token 获取新 Token。
 - 撤销: 强制登出时,加入 Token 黑名单。
 
🧰 八、技术实现选型
| 模块 | 推荐技术栈 | 
|---|---|
| 认证服务端 | Spring Authorization Server / Keycloak / OAuth2 Proxy | 
| Token 存储 | Redis / DB(短期票据) | 
| JWT 签名 | RSA 非对称加密 | 
| 登录 UI | Vue / React 独立登录页(统一风格) | 
| 客户端集成 | OAuth2 Client SDK / Spring Security OAuth Client | 
| 日志审计 | ELK / Loki / Kafka Sink | 
🧱 九、与 UMS、Passport 的关系
| 层级 | 职责 | 举例 | 
|---|---|---|
| UMS | 用户主数据管理 | 用户、部门、岗位 | 
| SSO | 统一认证(登录) | 登录页、Token、单点登出 | 
| Passport | 统一授权(权限) | 角色、资源、策略 | 
| IAM Gateway | 统一鉴权入口 | API 层安全控制 | 
✅ 简单理解:
- UMS:谁(用户)
 - SSO:谁登录了
 - Passport:能干什么
 - IAM Gateway:在什么场景下允许做什么
 
🧩 十、SSO 实践中的关键设计要点
| 设计点 | 建议 | 
|---|---|
| 跨域问题 | 统一二级域名(如 *.corp.com)可共享 Cookie | 
    
| 安全性 | Token 加签、CSRF 防护、登录失败限制 | 
| 多端支持 | Web / App / API 一致认证 | 
| 登录日志审计 | 记录 IP、设备、系统来源 | 
| 企业门户整合 | 登录后跳转统一 Portal 展示所有系统入口 | 
| 第三方接入 | 对接钉钉、飞书、企业微信登录 | 
| 零信任演进 | 将 SSO 与风控系统结合,基于风险动态验证 | 
🚀 十一、典型架构落地路线
| 阶段 | 目标 | 关键成果 | 
|---|---|---|
| 1️⃣ | 基础 SSO 实现 | 用户统一登录、登出、Token 机制 | 
| 2️⃣ | OAuth2 / OIDC 支持 | 各系统标准接入 | 
| 3️⃣ | 集成第三方身份源 | LDAP / AD / 钉钉 / 飞书 | 
| 4️⃣ | 多租户支持 | 每个企业租户独立登录域 | 
| 5️⃣ | 风控与零信任 | 动态验证、MFA、地理限制 | 
| 6️⃣ | 与 Passport 打通 | 登录后自动同步角色与权限 | 
✅ 十二、总结一句话
SSO = 企业的统一登录大脑 它连接了用户(UMS)和权限(Passport), 是企业身份体系从“分散登录”走向“统一安全”的中枢。
如果你想继续深入,我可以帮你:
- 📘 绘制一张 完整的 SSO 流程图(OAuth2 / OIDC 版本)
 - 📦 生成一个 基于 Spring Authorization Server 的 SSO 示例工程
 - 🧩 或者设计 与 UMS/Passport 打通的统一认证架构图
 
你希望我接下来帮你展开哪一部分?(流程图 / 示例工程 / 架构整合)
