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
- 用户访问 系统 A
- 系统 A 发现 未登录
- 👉 重定向到 SSO 登录页
- 用户输入账号密码
- SSO 校验成功
- SSO 返回 凭证(token / code / ticket)
- 系统 A 校验凭证,创建自己的登录态
- 登录完成 ✅
再访问系统 B
- 系统 B 发现没登录
- 重定向到 SSO
- SSO 发现你 已经登录过
- 直接发凭证给系统 B
- 秒进 ✅(无感登录)
常见实现方式(你大概率会遇到)
🔹 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 协议实现。