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

开发 前端
。OIDC是OAuth 2.0的一个扩展协议。它为什么要扩展OAuth 2.0?在搞清楚这个问题之前我们需要再回顾一下OAuth 2.0协议。

[[410657]]

上一文我们对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的关系是这样的:

  1. interface OIDC extends OAuth2{ 
  2.    boolean authentication () 

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

本文转载自微信公众号「码农小胖哥」,可以通过以下二维码关注。转载本文请联系码农小胖哥公众号。

 

责任编辑:武晓燕 来源: 码农小胖哥
相关推荐

2021-08-02 06:49:46

OIDC认证协议

2021-09-17 09:00:00

安全身份认证OAuth 2.0

2022-08-25 08:00:00

授权框架OAuth 2.0服务器

2014-09-03 09:52:45

开源

2020-06-12 14:17:26

开源协议ARM

2011-05-19 09:21:51

OracleJRockit

2020-04-15 09:00:00

OAth 2.0OpenIDWeb应用

2014-04-22 13:42:04

微软摩托罗拉专利

2009-08-27 17:44:40

技术授权协议

2024-11-04 10:28:08

2019-03-27 15:51:51

API 认证授权

2023-06-16 08:13:57

2013-12-31 10:08:44

苹果三星授权协议

2013-05-02 14:13:44

Android开发OAuth2服务认证

2024-05-11 08:14:53

2014-02-14 13:21:22

2020-07-08 07:45:44

OAuth2.0授权

2021-11-15 13:58:00

服务器配置授权

2022-09-30 08:16:38

令牌客户端隐藏式

2023-08-15 13:24:04

GPT-4AGI模型
点赞
收藏

51CTO技术栈公众号