sso和oauth2.0的区别是什么?

关注者
103
被浏览
59,927

6 个回答

一、OAuth2.0 实现了「授权」,SSO 还得实现「认证」


首先纠正一下这个题目吧,改成「 SSO 和 OAuth2.0 的关系是什么? 」可能比较合适。

一言以蔽之, OAuth2.0 可以是通往 SSO 这个 “罗马” 的其中一条路 ,但它们本身 并列于不同的场景与需求。

SSO OAuth2.0
含义 Single Sign On,单点登录 OAuth 的 2.0 版本
本质 一种思想 / 解决方案,抽象的 一种协议,具体的
应用场景 一次鉴权,畅通多个应用 发放令牌,授予操作权限
在业务系统中存储账密 × ×
验证用户身份的方式 session、cookie、token token
互相信任的应用群 ×
资源提供方 客户端+用户 用户

在详解 SSO 和 OAuth2.0 之前,需要先弄懂 “认证” 与 “授权” 。
认证 (Authentication):知道 ta 是谁
授权 (Authorization):知道 ta 有没有权限对资源执行试图执行的操作


认证操作需要由身份信息的持有者来完成,我们称其为 IdP(Identity Provider,身份提供商) 。而在使用 OAuth2.0 协议的流程中,是不出现 IdP 这一角色的。

我们可以借用《西游记》来理解一下:如果天界支持的是 OAuth2.0 协议,六耳猕猴真拿到了通关文牒(相当于token,令牌),那它就可以凭着这个去西天取经了。因为如来佛祖不管来的人猴姓甚名谁,只要令牌符合条件,就可以把经文取走。

换句话说, SSO 可以借助 OAuth2.0 完成了「授权」,但「认证」这一步还需要靠引入 IdP 来实现。

二、OAuth2.0

OAuth2.0 是一种 关于授权的开放网络标准 允许用户在一个站点向其他站点授予对其资源的有限访问权限 ,而 无需获得其凭证


设想一下,小蓝想把存储在 Google 的游戏录屏分享到 TapTap 这个手游分享社区,但又不愿意它拥有获取 Google 里所有资料的权力。问题是,只有得到了小蓝的授权,TapTap 才能读取 Google 相册里的视频。除了把 Google 的账密告诉其他应用,还有什么办法吗?


OAuth2.0 的诞生就解决了这个问题。简单来说,它在 Google 这个 SP(Service Provider,服务提供商)和 TapTap 客户端 之间设置了一道 “授权结界” 不让它们直接接触


被授权的主体 不是用户,而是 想要访问用户资源的业务系统 ,也就是TapTap 这种客户端。

三、单点登录 SSO


而 SSO 在引入身份提供商后,用户也成为了等待被认证、被授权的主体。

SSO(Single Sign On,单点登录)是指一种思想或服务, 用户只需使用一次登录凭据就可以访问其他所有被授予权限的应用

也就是说,小蓝用一组账号密码登录公司的考勤系统,切换至被授权的财务系统时也处于登录态,不会跳出让他重复登录的会话框。

还是用“真假美猴王”的例子来理解 SSO 和 OAuth2.0 的区别: 如果天庭购买了能够提供单点登录服务的软件,并委派一个 “身份官”(IdP)查岗,六耳猕猴就不仅要持有通关文牒这个 token,还得报上名来,证明自己是唐僧师徒四人的其中一个,才能取走经文。

可以看出, IdP 认证用户身份 并授权其访问存储在客户端的资源 ,是 SSO 比 OAuth2.0 走得更远之处。


认证的方式包括三种:

  • 通过 session 进行认证
  • 通过 cookie 进行认证
  • 通过 token 进行认证

市面上具备 SSO 功能的软件里, Authing 无需手动编写操作 session、cookie 或是 token的,控制台可以 一键体验 单点登录功能。官网的 使用指南 介绍得也比较清楚,感兴趣的话可以看看。

SSO是单点登录。即只需要登录一次,可以同步登陆状态到其他服务。

OAuth是通过遵循标准来实现第三方访问某一服务的资源,仍然是有登录行为,并不是无需登录直接同步状态。