前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OAuth 2.0只是授权协议,OIDC才是认证授权协议

OAuth 2.0只是授权协议,OIDC才是认证授权协议

作者头像
码农小胖哥
发布2021-07-22 15:57:30
7350
发布2021-07-22 15:57:30
举报

上一文我们对Keycloak保护Spring Boot应用进行了实操。让大家见识到了Keycloak的强大。为了掌握Keycloak就必须对OpenID Connect(OIDC)协议进行了解。OIDC是OAuth 2.0的一个扩展协议。它为什么要扩展OAuth 2.0?在搞清楚这个问题之前我们需要再回顾一下OAuth 2.0协议。

OAuth 2.0

以往胖哥也说了不少OAuth 2.0协议相关的东西,但是依然让大家云里雾里。所以今天我们换一个角度来说一说OAuth 2.0。如今利用这个协议搞开放API的越来越多了。

为什么要开放授权

假如我开发了一个互联网照片存储服务,这里叫它XX相册存储服务,经过精心的运营用户量达到了一定的规模,这个时候往往会进入一个瓶颈期,我希望进一步提升这个品牌的知名度以改变这种现状。而另一个第三方照片打印平台也看中了我的独特优势,希望我能开放一些功能出来给他们调用。

强强联合,做大做强!我觉得这是一个好主意,它用了我的开放服务后也可以帮我引流用户、扩大我的影响力。从用户角度来看,可以同时享受照片云储存、云打印服务是非常具有吸引力的。所以开放一些功能给第三方是非常划算的。

客户端授权接入

虽然开放授权的好处很多,但是也不能没有规则。用户的隐私保护、数据安全都是非常重要的。经过仔细斟酌,我确定了下面几条开放的原则:

  • 第三方需要在我的平台开个户,这样方便我对第三方平台进行管理和审计。哪个第三方不合规我就限流甚至封停其资格。
  • 明确开放的接口类目并对其进行权限分类。用来满足不同层次的第三方。有的第三方只能获取用户信息;有的第三方可以调用云打印。方便后续收费恰饭
  • 调用这些服务必须征求照片的实际拥有者(资源拥有者)同意,这是一个法律问题。获取用户的信息和资源必须征得用户同意才行。

于是第三方打印平台按照我制定的规则提请了一个接入申请,审核通过后我给他发了一套客户端凭证,包含了clientId和对应的secret,并明确告知第三方可以申请哪些功能,然后第三方就可以根据API文档进行开发了。

授权流程

用户登录了照片打印平台,发现居然还提供从XX相册存储服务拉取照片打印的功能。便兴冲冲地尝试了一下 。大致的过程是这样的:

  1. 用户告诉打印平台: 听说你能从XX相册存储服务把我照片给拉过来打印,给我操作一下。
  2. 打印平台回复用户:没问题,不过我得先给XX相册存储服务说一下。我得带上我自己的标识clientId,还有你请求的事项权限scopes。以及遵循的流程类型authorizationGrantType。为了安全起见我们最好弄个state随机码防止中间人攻击。XX相册存储服务会通过我提供的专线redirectUri进行给您确认,您到时候确认一下。
  3. XX相册存储服务用户确认:您是不是要授权给XX打印平台拉取您的照片?
  4. 用户确认的话需要向XX相册存储服务提供自己的用户凭证并确认;否则拒绝,流程到此结束。
  5. XX相册存储服务收到用户的确认信息后回复打印平台: 用户确认过了,给您一个临时凭证code(authorizationGrantType=code) ,你来换Token然后就可以凭此拉取该用户的照片了。
  6. 打印平台换取了Token成功地拉取了该用户的照片并打印。
  7. 用户不用来回奔波就享受了跨平台云打印服务,用户体验度得到了提升。

OIDC的产生背景

OAuth 2.0协议只解决了授权的问题,客户端只要得到了资源所有者的授权就能访问资源。OAuth 2.0本身并没有提供用户认证的规范。

OAuth 2.0本身无法证明资源所有者就是正确的资源所有者OAuth 2.0中涉及的用户认证都建立在其它认证的可靠性之上OAuth 2.0只消费认证的结果并不参与认证的流程

基于这个原因OpenID Connect诞生了。它和OAuth 2.0的关系是这样的:

代码语言:javascript
复制
interface OIDC extends OAuth2{
   boolean authentication ()
}

也就是说OIDCOAuth 2.0 的基础之上增加一个对资源所有者的认证流程,实现了真正意义上的认证授权。基于篇幅的原因,我会在后续系列文章中和大家共同学习OIDC协议。如果你有什么疑问可以留言讨论。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农小胖哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • OAuth 2.0
    • 为什么要开放授权
      • 客户端授权接入
        • 授权流程
        • OIDC的产生背景
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档