1. SSO 基础概念:什么是单点登录、核心价值与 OAuth2.0 的关系
1.1 什么是单点登录
单点登录(Single Sign-On,SSO)是一种身份认证机制,允许用户使用一组凭证(如用户名/密码)登录一次,即可访问多个相互信任的应用系统,而无需在每个系统中重复输入凭证。
从架构视角看,SSO 的核心是建立一个统一的认证中心(Identity Provider,IdP),所有应用系统(Service Provider,SP)将认证决策委托给该中心。用户只需在 IdP 完成一次认证,后续访问其他 SP 时,IdP 会向 SP 签发一个已认证的令牌(Token),SP 验证令牌后即允许用户访问。
关键特征: 一次认证,多点通行;认证与授权分离;集中管理用户会话。
1.2 SSO 的核心价值
SSO 并非单纯为了减少登录次数,它在企业级分布式系统中具有深远的架构价值。下表从多个维度对比了 SSO 与传统独立认证的差异:
| 维度 | 传统独立认证 | SSO 统一认证 |
|---|---|---|
| 用户体验 | 每套系统独立登录,频繁输入凭证 | 一次登录,无缝切换,提升效率 |
| 安全管控 | 密码分散存储,难以统一策略 | 集中管理密码策略、多因素认证(MFA) |
| 运维成本 | 每套系统独立维护用户库 | 统一用户目录,降低账号管理开销 |
| 审计合规 | 日志分散,难以追溯全链路 | 集中审计,完整记录用户访问轨迹 |
| 扩展性 | 新增系统需重新对接认证逻辑 | 标准化协议对接,快速集成新应用 |
架构启示: 在微服务与多前端(Web、移动端、桌面端)并存的场景下,SSO 是构建统一身份基座的前提,也是后续实现细粒度权限控制(RBAC/ABAC)的基础。
1.3 SSO 与 OAuth2.0 的关系
SSO 和 OAuth2.0 经常被混淆,但两者解决的是不同层次的问题。SSO 关注身份认证(你是谁),OAuth2.0 关注授权委托(你能做什么)。然而,在实际工程中,两者常常协同工作。
下表清晰展示了它们的核心区别:
| 对比项 | SSO(单点登录) | OAuth2.0(开放授权) |
|---|---|---|
| 核心目标 | 一次认证,访问多个系统 | 资源所有者委托第三方应用访问其资源 |
| 主要参与者 | 用户、认证中心、应用系统 | 资源所有者、客户端、授权服务器、资源服务器 |
| 产出物 | 会话令牌(Session Token / Cookie) | 访问令牌(Access Token)、刷新令牌(Refresh Token) |
| 典型协议 | SAML、CAS、Kerberos | OAuth2.0、OpenID Connect |
| 是否包含用户身份 | 是,核心是验证用户身份 | 否,核心是授权访问,不强制传递用户身份 |
在实际架构中,OpenID Connect(OIDC) 是 OAuth2.0 之上的一层身份认证协议,它让 OAuth2.0 具备了 SSO 的能力。OIDC 在 OAuth2.0 的 Access Token 基础上,额外返回一个 ID Token(JWT 格式),其中包含用户的身份信息,从而实现了“授权 + 认证”的统一。
常见误区: 不要认为实现了 OAuth2.0 就等于实现了 SSO。OAuth2.0 本身不定义用户如何登录,它只定义令牌如何发放。真正的 SSO 需要结合 OIDC 或类似协议来传递用户身份信息。
1.4 SSO 核心架构示意图
下图展示了 SSO 的基本交互流程,帮助理解认证中心、应用系统与用户之间的协作关系:
1.5 SSO 与 OAuth2.0 的协作关系图
为了更直观地理解 SSO 与 OAuth2.0 在实际系统中的协作方式,下图展示了基于 OIDC 的 SSO 架构:
1.6 小结
- SSO 解决的是“一次登录,全网通行”的认证问题,核心是统一认证中心与会话共享。
- OAuth2.0 解决的是“第三方应用如何安全访问用户资源”的授权问题,不直接处理用户身份。
- OpenID Connect 是 OAuth2.0 的身份认证扩展,是当前实现 SSO 的主流方案。
- 在分布式系统架构中,SSO 是身份基座,OAuth2.0/OIDC 是协议载体,两者结合才能构建安全、可扩展的统一认证体系。