90% 开发者分不清:SSO 单点登录 vs OAuth2.0 授权
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
🤔 开场白:你真的分清楚了吗? 在面试中,问到 SSO 和 OAuth2.0 的区别,十个人里面起码有八个答错。 有人说:"SSO 不就是 OAuth2.0 吗?都是登录嘛。" 有人说:"OAuth2.0 就是第三方登录啊,和 SSO 一样一样的!" 😅 然而这两个概念,虽然长得像亲戚,但解决的根本问题完全不同。 一句话总结:
接下来,我们用最接地气的方式,把这两个概念彻底讲清楚。
一、🔐 SSO 单点登录 — "一把万能钥匙" 1.1 什么是 SSO? SSO(Single Sign-On,单点登录)的核心思想很简单: 你在公司上班,需要用到 OA 系统、HR 系统、报销系统、GitLab……每天早上一个个输密码,你烦不烦?
这就像进入一栋大楼刷了门禁卡,楼里各层的门都自动打开,不用每层单独刷卡。
1.2 SSO 的工作原理 经典的 SSO 流程(基于 CAS 或 SAML)如下:
▲ SSO 单点登录流程:一次登录,多系统通行
• ① 用户访问系统 A,发现未登录,跳转到统一认证中心(IdP) • ② 用户在 IdP 输入账号密码完成登录,IdP 签发一张「全局票据」(Token) • ③ 用户带着票据访问系统 A,系统 A 去 IdP 验证票据有效,放行! • ④ 接着访问系统 B,IdP 发现已登录,直接颁发子票据给系统 B,无需再次登录 • ⑤ 注销时,IdP 通知所有系统同步清除登录态(Single Logout)
1.3 代码示意:JWT Token 验证逻辑
1.4 SSO 的使用场景 • 🏢 企业内部多系统统一登录(OA + HR + ERP + GitLab) • 🏫 高校统一身份认证(教务 + 邮件 + 图书馆) • ☁️ 云服务商多产品统一登录(阿里云旗下各产品)
二、🔑 OAuth 2.0 授权 — "受控的钥匙借用" 2.1 什么是 OAuth 2.0? OAuth 2.0(开放授权协议)解决的是一个不同的问题: 你想用某个 App 看你的微信好友列表,但你不可能把微信密码给这个 App!
这就像你不把房子钥匙给快递员,而是给他一张只能打开门禁的临时通行证,限时有效。
2.2 OAuth 2.0 的四个角色 OAuth 2.0 里有四个关键角色,记住这四个,整个协议就通了:
2.3 OAuth 2.0 核心授权流程 以最常用的「授权码模式」(Authorization Code Flow)为例:
▲ OAuth 2.0 授权码模式流程
2.4 OAuth 2.0 四种授权模式 OAuth 2.0 有四种授权方式,不同场景用不同模式:
• 🏆 授权码模式(Authorization Code):最安全,适合服务端 Web App • 📱 隐式模式(Implicit):适合纯前端 SPA,已逐渐被 PKCE 替代 • 🔧 密码模式(Password):用户直接提供账密,仅限高信任场景(不推荐) • 🤖 客户端凭证模式(Client Credentials):无用户参与,机器间 M2M 调用
2.5 OAuth 2.0 的使用场景 • 📲 第三方登录:微信/QQ/GitHub 登录第三方 App • 🔗 开放 API 授权:允许第三方读取你的数据(如授权某 App 读取日历) • 🤝 平台开放生态:开放平台对第三方开发者的 API 授权管理
三、⚔️ SSO vs OAuth 2.0 — 一张表彻底对比 先看对比图总览:
▲ SSO vs OAuth 2.0 核心差异对比
3.1 核心差异一句话总结
3.2 它们的关系 很多人问:OAuth 2.0 和 SSO 有没有关系? 答案是:它们不是同一个维度的概念,但可以组合使用!
• OpenID Connect(OIDC)= OAuth 2.0 + 身份认证层,常用于实现 SSO • 企业级 SSO 内部可以用 OAuth2.0 的 Token 机制来实现跨系统凭证传递 • 但 SSO 不等于 OAuth,OAuth 也不等于 SSO,二者目标不同
四、🚫 常见误区 & 防坑指南 误区 ① SSO 就是用了 OAuth,不需要单独建认证中心 ❌ 错误。SSO 需要一个独立的认证中心(IdP),OAuth 是授权框架,不是 SSO 的实现方式。 ✅ 正确做法:可以用 Keycloak / CAS / Okta 搭建企业 SSO,其中可以集成 OAuth 2.0/OIDC 协议。
误区 ② OAuth 2.0 就是登录,不是授权 ❌ 错误。OAuth 2.0 本质是「授权框架」,登录只是一个附带功能(通过 OIDC 扩展实现)。 ✅ 正确做法:需要登录功能时,应该用 OpenID Connect(基于 OAuth 2.0 的身份层)而不是裸 OAuth。
误区 ③ 把 access_token 存在 localStorage,安全呢 ❌ 危险!localStorage 容易被 XSS 攻击盗取 Token,造成账号劫持。 ✅ 正确做法:access_token 存 httpOnly Cookie,配合 CSRF 防护;或采用 BFF(Backend for Frontend)模式。
五、📌 总结 我们用一张对比表 + 三句话来收尾:
• 🔐 SSO = 企业内统一登录体验,「登录一次,到处通行」 • 🔑 OAuth 2.0 = 跨平台安全授权框架,「不给密码,只给令牌」 • 🔗 OIDC = OAuth 2.0 + 身份认证 = 两者的最优结合拳
面试被问到这个问题,你只需要说:
阅读原文:https://mp.weixin.qq.com/s/1UNeWMQkDxgi9EBMgpdtlw 该文章在 2026/5/16 11:39:08 编辑过 |
关键字查询
相关文章
正在查询... |