单点登录

211 阅读2分钟

🧭 流程概览:

✅ 1. 用户访问前端页面

  • 用户访问前端 SPA 页面(例如 https://app.example.com)。

🔍 2. 前端检测本地是否已登录

  • 前端检查本地是否有有效的 token(如从 localStoragecookie 中)。
  • 如果没有 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

🔄 登出流程

  1. 前端清除本地 token;
  2. 跳转到 SSO 的登出地址;
  3. SSO 同时登出所有系统;
  4. 可以跳转回前端首页或登录页。

🌐 单点登录(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: 登录成功,访问资源