聊到 SSO (Single Sign-On) 和 OAuth 2.0,很多人容易把它们搞混。最简单、最透彻的讲法是:把它们看作生活中的不同“通行证”场景。
我们可以从“是什么”、“区别在哪”以及“怎么配合”三个维度来拆解。
1. 核心概念:它们到底在干嘛?
SSO (单点登录) —— “一钥匙开多门”
SSO 是一种功能需求或体验方案。它的目标是:用户只需要在一个地方登录,就可以访问同一个信任域下的所有相互独立的系统(比如登录了谷歌邮箱,就不用再登录 YouTube)。
OAuth 2.0 —— “限权的代客泊车钥匙”
OAuth 2.0 是一个授权框架(虽然常被拿来做身份验证)。它的核心是:在不泄露密码的情况下,让第三方应用获得你的授权,去访问你的资源。
神级比喻:
SSO 像是一张公司工牌。你进大门刷一次,之后进办公室、进茶水间、进机房都不用再刷,因为它证明了“你是谁”。
OAuth 2.0 像是一张酒店临时房卡。你(用户)给打扫阿姨(第三方应用)这张卡,阿姨可以进房间收拾(获取资源),但阿姨并不知道你原本的房门密码。
2. 深度对比:它们的核心逻辑
为了讲清楚这两者,可以用下面这张表:
| 维度 | SSO (通常指 SAML/CAS) | OAuth 2.0 |
| 核心目的 | 身份验证 (Authentication):证明你是你。 | 授权 (Authorization):允许第三方做某些事。 |
| 应用场景 | 企业内部系统、全家桶系列产品。 | 开放平台、第三方快捷登录(用微信登录抖音)。 |
| 信任关系 | 强信任:子系统完全信任认证中心。 | 弱信任:应用只拿到有限权限的 Token。 |
| 交互主体 | 用户、认证中心、多个子应用。 | 用户、资源拥有者、第三方客户端、授权服务器。 |
3. 为什么大家总把它们搅在一起?
这是最容易产生困惑的地方:现在的 SSO 往往是用 OAuth 2.0(准确说是基于它的 OIDC)实现的。
OIDC (OpenID Connect):两者结合的产物
OAuth 2.0 本生只负责“发通行证”,不负责“告诉你这张脸是谁”。于是人们在 OAuth 2.0 之上加了一个身份层,叫 OIDC。
-
OAuth 2.0 给你一个
Access Token(授权令牌)。 -
OIDC 额外给你一个
ID Token(身份令牌)。
通过这种方式,OAuth 2.0 就成了实现 SSO 的一种技术手段。
4. 怎么讲最容易让人听懂?(面试/演示套路)
你可以按照这个逻辑叙述:
-
先讲痛点: “如果没有 SSO,我进十个系统要输十次密码;如果没有 OAuth,我想让打印店打印我网盘的文件,就得把网盘密码告诉店员。”
-
讲区别: “SSO 解决的是登录烦恼,OAuth 解决的是安全授权问题。”
-
讲联系: “现在主流的做法是用 OIDC (基于 OAuth 2.0) 来做 SSO。比如你用微信登录各种 App,这就是利用 OAuth 的流程实现了 SSO 的体验:微信是认证中心,App 是第三方应用。”
总结一句话:
SSO 是为了让你“少记密码”,OAuth 2.0 是为了让你“少给密码”。