易君召
易君召
发布于 2026-11-13 / 1 阅读
0

单点登录(SSO)常用技术方案梳理

单点登录核心目标:一次登录,多信任系统免登,分为「同源简单 SSO」、「跨域标准协议 SSO」、「企业内部自研轻量化方案」、「现代云原生 / 分布式 SSO」几大类,下面按工业界使用热度排序,讲清原理、适用场景、优缺点。

一、标准协议类(生产最主流,推荐优先选)

1. OAuth2.0 + OIDC(OpenID Connect)⭐⭐⭐⭐⭐

当前互联网、SaaS、云平台首选,微信 / 支付宝 / GitHub 登录、企业 IdP 基本都是这套

  • OAuth2.0:授权协议,本身不是认证协议,解决 “给第三方应用授权访问资源”

  • OIDC 1.0:在 OAuth2 之上扩展,增加 id_token(JWT),变成认证协议,真正实现 SSO

  • 角色:IdP(身份提供商,如 Authelia、Keycloak、Azure AD、钉钉、企业微信)、RP/Client(业务应用)

  • 流程:授权码模式(Authorization Code)最常用;还有 PKCE 模式给 SPA、移动端

  • 特点: ✅ 标准化、跨语言、跨厂商、支持联邦身份;支持登出(Front/Back-channel logout) ✅ Token 自包含(JWT),应用本地校验,不用每次回 IdP 查库 ❌ JWT 无法撤销(除非搭配黑名单 /introspect 接口);需要做好密钥管理

  • 典型产品:Keycloak、Authelia、Casdoor、Okta、Auth0、企业微信 / 钉钉 OIDC

2. SAML 2.0(Security Assertion Markup Language)⭐⭐⭐⭐

传统政企、金融、老 OA、国外企业 IdP 大量使用,偏笨重但是企业联邦标准

  • 基于 XML 断言,HTTP-Redirect / HTTP-POST 绑定

  • 典型场景:政务系统、外企 ADFS、Salesforce、老 ERP、校园统一身份认证

  • 特点: ✅ 成熟稳定、强安全、支持复杂权限断言、企业间身份联邦 ❌ XML 报文繁琐、调试难、不适合移动端、SPA;现代新项目很少从零实现 SAML

3. CAS(Central Authentication Service)⭐⭐⭐

老牌开源 SSO 协议,国内高校、传统政务系统用得很多(CAS Server)

  • 核心模型:中央认证服务,Ticket 机制(TGT、ST)

  • 流程:登录 CAS 中心 → 下发 TGT Cookie;业务系统跳转 CAS 拿 ST,校验 ST 拿到用户信息

  • 特点: ✅ 轻量易懂,源码成熟(Apereo CAS),早期国内 SSO 标杆 ❌ 协议老旧,生态不如 OIDC;原生对移动端、前后端分离支持弱;逐步被 OIDC 替代

二、Cookie 共享类(简单自研方案,仅限同主域)

适合同一根域名下多子系统,跨一级域名不能用

原理: 登录中心在 .shturl. 种下顶级域 Cookie;所有子应用 a.shturl.、b.shturl. 都能读取这个 Cookie;统一 Session 存在 Redis。

  • 优点:最简单,开发成本低

  • 缺点: ❌ 不能跨一级域名(浏览器同源策略限制) ❌ CSRF 风险高;移动端、第三方外部应用无法接入

适用:内部后台一套主域下多个子系统,不对外 SaaS 接入

2. 父页面跨域 PostMessage + 登录中心 iframe(跨域简易方案)

原理: 各业务页面内嵌登录中心 iframe,iframe 和登录中心同域,能读到登录 Cookie;业务页面通过 postMessage 向 iframe 查询登录态。

  • 优点:绕过跨域拿登录态

  • 缺点:安全坑多、容易被 XSS 劫持;弹窗拦截;现代架构尽量避免

三、Token 中转 / 票据类自研方案(跨域自研 SSO)

1. 跳转票据模式(简易 CAS 思想)

流程:

  1. 访问业务系统,未登录 → 重定向到统一登录中心

  2. 用户登录成功 → 生成一次性临时票据 ticket,跳转回业务系统

  3. 业务系统拿着 ticket 请求登录中心校验接口,拿到用户信息、建立本地会话

  4. 登录中心保留全局登录会话

  • 优点:可跨域,逻辑简单,很多中小公司早期自研 SSO 都是这套

  • 缺点:需要自己实现登出同步、防重放、票据过期;轮子多,容易写出安全漏洞

很多自研 SSO 本质就是复刻 CAS 思想,只是协议不标准

四、基于代理网关的 SSO(云原生、K8s 生态热门)

反向代理 SSO / 认证网关(Auth Proxy)⭐⭐⭐⭐

代表:OAuth2 Proxy、Authelia、Pomerium、Ingress-Nginx + auth-url 架构:网关统一拦截所有应用请求,网关去 IdP(OIDC/SAML)做认证;认证通过后,把用户信息通过请求头传给后端业务服务。

  • 业务应用不需要改代码,不用对接 SSO SDK,只需要读取 Header

  • 适合:K8s 集群内部一堆内部服务、监控面板(Grafana、Prometheus)、内部工具

  • 局限:粒度粗,适合全局认证;复杂业务权限还需要应用自己处理

五、其他身份相关补充方案

  1. AD / LDAP + Kerberos Windows 域环境传统方案,企业内网 Windows 机器免登(域登录);现在一般是 IdP 对接 LDAP,对外走 OIDC/SAML,很少直接 Kerberos 给 Web SSO。

  2. JWT 单点登录(注意:JWT 不是 SSO 协议!) 很多人混淆:JWT 只是令牌格式。可以配合 OIDC、自研票据方案使用;单独 JWT 无法天然实现 SSO,没有统一登录页面、没有全局登出能力。

  3. WebAuthn / Passkey 是认证方式(无密码登录),不是 SSO 协议,常和 OIDC 结合,作为 IdP 里面的登录方式。

方案选型速查表

方案

跨一级域名

标准化

适合场景

推荐度

OIDC(OAuth2)

✅

是

SaaS、移动端、小程序、新项目、云原生

⭐⭐⭐⭐⭐

SAML2.0

✅

是

政企老系统、ADFS、外企、身份联邦

⭐⭐⭐⭐

CAS

✅

是

高校、传统政务存量系统

⭐⭐⭐

共享 Cookie

❌

自研

同主域内部子系统

⭐⭐

跳转票据自研

✅

自研

小团队简单内部系统

⭐

Auth 代理网关

✅

基于 OIDC

K8s 内部服务、免改应用接入

⭐⭐⭐⭐

工程上选型建议

  1. 新项目、对外 SaaS、多端(Web/App/ 小程序):优先 OIDC,直接上成熟 IdP:Keycloak(开源自托管)、Casdoor、Authelia

  2. 对接老政企、ADFS、国外系统:SAML2.0

  3. K8s 内部一堆中间件、内部工具:OAuth2 Proxy / Authelia 网关 SSO

  4. 同根域名下几个后台内部系统,预算有限:共享 Cookie+Redis Session

  5. ❌ 尽量不要从零手写一套自研 SSO,登出同步、票据防重放、安全漏洞非常容易踩坑

补充两个高频概念区分

  • SSO:解决一次登录多个系统

  • SSO ≠ 统一身份管理(IAM):IAM 包含账号、权限、组织、MFA,SSO 是 IAM 其中一个能力;Keycloak、Casdoor 本质是 IAM,对外暴露 OIDC/SAML 能力做 SSO

  • 单点登出(SLO)是 SSO 难点:OIDC 支持前后端通道登出;自研方案很容易出现 “登录中心退出了,业务系统还保持登录”


本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。

原文链接 https://www.yijunzhao.cn/archives/sso-common-technical-solutions-guide

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/