在上一篇文章中,我们对Keycloak对SpringBoot应用的保护进行了实战操作。让大家见识一下Keycloak的强大。为了掌握Keycloak,有必要了解OpenIDConnect(OIDC)协议。OIDC是OAuth2.0的扩展协议。为什么要扩展OAuth2.0?我们需要回顾一下OAuth2.0协议才能弄清楚这个问题。OAuth2.0之前胖哥也讲了很多OAuth2.0协议相关的东西,但是还是让大家一头雾水。那么今天我们就从另一个角度来说说OAuth2.0。现在越来越多的人使用这个协议来搞开放API。为什么要开放授权?如果我开发了一个互联网图片存储服务,这里叫XX相册存储服务。经过精心运营,用户数量已经达到一定规模。这个时候往往会进入瓶颈期。希望进一步提升品牌知名度。人气改变了这种状况。而另外一个第三方照片冲印平台也看中了我得天独厚的优势,希望我能开放一些功能给他们调用。强强联合,做大做强!我认为这是个好主意。使用我的开放服务后,还可以帮助我吸引用户,扩大影响力。从用户的角度来看,能够同时享受照片云存储和云打印服务是非常有吸引力的。所以把一些功能开放给第三方是非常划算的。客户端授权访问虽然开放授权有很多好处,但也不能排除。用户隐私保护和数据安全非常重要。经过深思熟虑,我确定了以下公开原则:第三方需要在我平台开户,方便我对第三方平台进行管理和审核。对于不符合规定的第三方,本人将限制甚至暂停其资格。明确开放接口类别,划分权限。用于满足不同层次的第三方。部分第三方只能获取用户信息;一些第三方可以调用云打印。支付后续餐费很方便。调用这些服务必须征得照片实际所有者(资源所有者)的同意,这是一个法律问题。获取用户信息和资源必须征得用户同意。于是第三方印刷平台按照我制定的规则提交了接入申请。审核通过后,我给他发了一套客户端凭证,包括clientId和对应的secret,明确告诉第三方可以申请哪些功能,然后第三方就可以根据API文档进行开发了。授权流程用户登录照片打印平台,发现还提供了从XX相册存储服务中拉取照片进行打印的功能。然后兴奋地试了一下。大致流程如下:用户告诉打印平台:听说你们可以从XX相册存储服务中拉出我的照片打印出来,让我操作。打印平台回复用户:没问题,但我得先告诉XX相册存储服务。我要带上我自己的身份标识clientId,还有你要求的物品权限范围。以及要遵循的流程类型authorizationGrantType。为了安全起见,我们最好弄个状态随机码来防止中间人攻击。XX相册存储服务会通过我提供的专线redirectUri向您确认,您到时候再确认。XX相册存储服务向用户确认:是否授权XX冲印平台拉取您的照片?如果用户确认,则需要向XX相册存储服务提供用户凭证并确认;否则,过程到此结束。XX相册存储服务收到用户确认信息后,会回复打印平台:用户已确认,并会给你一个临时凭证码(authorizationGrantType=code),你可以兑换Token,用它来拉取用户照片.换取Token,打印平台成功拉取用户照片并打印。用户无需来回奔波即可享受跨平台云打印服务,提升了用户体验。OIDC的背景OAuth2.0协议只解决了授权的问题,客户端只要得到资源拥有者的授权就可以访问资源。OAuth2.0本身并没有提供用户认证的规范。OAuth2.0本身无法证明资源所有者是正确的资源所有者。OAuth2.0涉及的用户认证是建立在其他认证的可靠性之上的。OAuth2.0只消费认证结果,不参与认证过程。为此,OpenIDConnect应运而生。它与OAuth2.0的关系如下:interfaceOIDCextendsOAuth2{booleanauthentication()}也就是说,OIDC在OAuth2.0的基础上增加了对资源拥有者的认证过程,实现了真正意义上的认证授权。由于篇幅原因,我将在后续系列文章中与大家共同学习OIDC协议。有什么问题可以留言讨论。本文转载自微信公众号“码农小胖哥”,可通过以下二维码关注。转载本文请联系码农小胖公众号。
