🧭 流程概览:
✅ 1. 用户访问前端页面
- 用户访问前端 SPA 页面(例如
https://app.example.com)。
🔍 2. 前端检测本地是否已登录
- 前端检查本地是否有有效的 token(如从
localStorage、cookie中)。 - 如果没有 token,重定向到 SSO 登录地址,并带上当前页面的 redirect 参数。
https://sso.example.com/login?redirect=https://app.example.com
🔑 3. 用户在 SSO 中登录
- 用户在 SSO 系统中输入账号密码,认证成功。
🎟 4. SSO 跳转回前端并附带认证凭据(如 token 或临时授权码)
- SSO 登录成功后,重定向回前端页面,并携带授权信息:
https://app.example.com?code=ABC123
📬 5. 前端用 code 向后端换取 access token
- 前端将
code发送给自己系统的后端 API:
POST /api/auth/exchange-code
Body: { code: 'ABC123' }
📦 6. 后端返回 token,前端存储
- 后端返回系统自己的 access token:
{
"accessToken": "xxxx.yyyy.zzzz",
"userInfo": { "id": 1, "name": "张三" }
}
🔁 7. 之后的 API 调用带上 token
- 前端请求后端 API 时,在请求头中带上 token:
Authorization: Bearer xxxx.yyyy.zzzz
🔄 登出流程
- 前端清除本地 token;
- 跳转到 SSO 的登出地址;
- SSO 同时登出所有系统;
- 可以跳转回前端首页或登录页。
🌐 单点登录(SSO)实现方案
一、背景说明
单点登录(SSO, Single Sign-On)是一种认证机制,用户只需登录一次,即可访问多个系统或子系统,无需重复认证。
二、架构设计
1. 组件角色
| 组件 | 作用 |
|---|---|
| SSO 认证中心 | 提供登录界面、生成并验证令牌 |
| 子系统 A/B/C | 业务系统,依赖认证中心获取身份信息 |
三、认证流程
sequenceDiagram
participant User
participant SystemA
participant SSO
User->>SystemA: 访问受保护资源
SystemA->>User: 重定向至 SSO 登录页(附 redirect_uri)
User->>SSO: 填写登录信息
SSO->>User: 登录成功,重定向 redirect_uri?token=xxx
User->>SystemA: 携带 token 返回
SystemA->>SSO: 请求验证 token
SSO-->>SystemA: 返回用户信息
SystemA->>User: 登录成功,访问资源