在OAuth2授权流程中实现联合身份认证_区块链

很多同学都知道第三方登录,也都对接过微信、QQ、钉钉等三方登录,但是联合身份认证Federated Identity)这个概念应该只有少数人了解过,包括胖哥也是一年前才知道这个概念。既然追求刺激,那就贯彻到底!胖哥花了点时间,在OAuth2授权流程中实现了联合身份认证,今天就分享一些骚操作。

联合身份模式

将身份验证委托给可信任的身份提供者(IDP),包含自有平台和第三方,和认证的协议和方式也关系不大,OAuth2SAML2.0LDAP,甚至我们普通的登录,这可以简化开发,最大限度地减少用户管理的需求,并改善应用程序的用户体验。

而且这个东西也是实际业务需要,用户通常因业务需要会在多个平台的应用程序之间进行流动,如果用户要维护多个平台的认证凭据,势必打断用户的流程,加大用户凭据管理难度。

另一方面,平台也希望用户的注册登录变得简单一些,这样拉新也容易一些。如果你注册一个新平台,拿出微信扫一下码进行三方注册登录,还是填写一堆资料和验证码?大部分人会选择前者。

体验联合身份认证

首先要有一个自己的用户认证中心,然后把自有认证和第三方接入进来,保持流程的一致性。最近胖哥在​​Id Server​​开源项目中实现了联合身份认证,具体的东西还是挺麻烦的,我觉得还是通过一些直观的方法展示一下好。先说一下步骤:

  • 我请求了一个OAuth2客户端的redirect_uri​/foo/bar​​。
  • OAuth2客户端会引导跳转到授权服务器的登录页面。
  • 关键就是这个登录页面,集成了微信生态提供的微信登录功能。如果按以前的传统,账密或者验证码,我们的用户登录,接受授权就完事了;现在不一样了,多了微信的两种方式。
  • 选择任意一种微信登录,开启了微信登录的流程,会向微信的授权服务器发起请求,微信流程同意后,把结果告知我们自己的授权服务器。
  • 我们授权服务器去拿微信用户的信息,完成认证逻辑,这个时候接着走我们自己平台的授权流程,后面的就不多说了跟以前不一样。

这里的关键点就是对用户认证过程的抽象,会附加一些流程,起点和终点还是一致的。

话不多说,看下面的视频大概你就能感觉到联合身份认证了。

最后要说明一下,OAuth2授权服务器只能在授权码模式下实施联合身份认证