SSO单点登陆

10 阅读2分钟

SSO 单点登录(Single Sign-On)简单说就是:

用户只需要登录一次,就可以访问多个相互信任的系统,而不需要在每个系统里重复登录。


用人话解释一下 👇

假设你在公司有这些系统:

  • OA 系统
  • GitLab
  • 内部管理后台
  • 数据看板

没有 SSO:
👉 每个系统都要输一遍账号密码(烦 + 不安全)

有了 SSO:
👉 你只在「统一认证中心」登录一次
👉 其他系统自动“信你已经登录过了”


SSO 的核心角色

一般有 三类角色

1️⃣ 认证中心(SSO Server / Identity Provider)

  • 负责 登录、校验用户身份
  • 只此一家,权威认证源
  • 例如:CAS、Keycloak、Auth0、Okta、自建认证中心

2️⃣ 业务系统(Service Provider)

  • OA、后台、子系统等
  • 不自己登录
  • 只问一句:“他是不是已经在 SSO 登过了?”

3️⃣ 用户

  • 只感受到:

    “咦?怎么不用再登录了?”


一个典型登录流程(前端架构师视角)

场景:访问系统 A

  1. 用户访问 系统 A
  2. 系统 A 发现 未登录
  3. 👉 重定向到 SSO 登录页
  4. 用户输入账号密码
  5. SSO 校验成功
  6. SSO 返回 凭证(token / code / ticket)
  7. 系统 A 校验凭证,创建自己的登录态
  8. 登录完成 ✅

再访问系统 B

  1. 系统 B 发现没登录
  2. 重定向到 SSO
  3. SSO 发现你 已经登录过
  4. 直接发凭证给系统 B
  5. 秒进 ✅(无感登录)

常见实现方式(你大概率会遇到)

🔹 Cookie + 域名共享(简单但受限)

  • 适合:同一主域名下(*.example.com
  • 依赖浏览器 Cookie
  • 不适合跨域 / 微服务复杂场景

🔹 Token(JWT 最常见)

  • SSO 登录成功 → 发 JWT
  • 子系统用 JWT 换取本地登录态
  • 前端/后端都很常见
  • 优点:解耦、跨域友好

🔹 OAuth 2.0 / OpenID Connect(企业级标准)

  • 事实标准

  • 支持:

    • 第三方登录
    • SSO
    • 授权访问
  • 常见流程:

    • Authorization Code
    • PKCE(前端必会)

前端你需要重点关心什么?🔥

作为 高级前端 / 架构师,这几个点非常关键:

✅ 登录态怎么存?

  • Cookie(HttpOnly / SameSite)
  • localStorage(⚠️ XSS 风险)
  • 内存态 + 刷新 token

✅ 跨域怎么处理?

  • iframe + postMessage
  • 重定向 + code
  • silent refresh

✅ 多系统退出怎么做?

  • 单点登录 ≠ 单点登出

  • 常见方案:

    • SSO 统一登出
    • token 失效
    • 前端广播 logout

✅ 安全问题(架构必问)

  • CSRF
  • XSS
  • Token 泄露
  • Refresh Token 失效策略

一句话总结

SSO 是一种统一身份认证机制,让用户在多个系统中只需登录一次即可访问所有受信任系统,通常通过统一认证中心 + token / OAuth 协议实现。