OAuth2.0第三方登陆总结 | 开发日常

Posted 日拱一卒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OAuth2.0第三方登陆总结 | 开发日常相关的知识,希望对你有一定的参考价值。

现在好多应用都使用第三方登陆插件来降低用户注册的门槛,以此吸引更多用户。利用周末也给自己的Side Project加了个第三方登陆,目前来说国内主流活跃量大的第三方也就三家微信、微博、QQ,它们都遵循OAuth 2.0授权机制,如果你实现了其中一个,那么其它两家也相当于搞定了,今天这篇就记录分享一下在使用各家第三方登陆时遇到的一些问题,并对使用流程做个概括。

OAuth 2.0流程


  • (A)用户打开客户端以后,客户端要求用户给予授权。

  • (B)用户同意给予客户端授权。

  • (C)客户端使用上一步获得的授权,向认证服务器申请令牌。

  • (D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。

  • (E)客户端使用令牌,向资源服务器申请获取资源。

  • (F)资源服务器确认令牌无误,同意向客户端开放资源。

其中比较关键的一步是(B),客户端获取授权,只有拿到授权后,客户端才能进一步获取令牌(Access Token),OAuth 2.0定义了4种授权方式

  • 授权码模式(authorization code)

  • 简化模式(implicit)

  • 密码模式(resource owner password credentials)

  • 客户端模式(client credentials)

四个里面,授权码模式用的最为广泛,国内3大平台都是采用的这种机制。下面是流程图:

OAuth2.0第三方登陆总结 | 开发日常

  • (A)用户访问客户端,后者将前者导向认证服务器。

  • (B)用户选择是否给予客户端授权。

  • (C)假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。

  • (D)客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。

  • (E)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。

微信

OAuth2.0第三方登陆总结 | 开发日常

  1. 获取CODE,即获取客户端授权码,

  2. 使用客户端授权码CODE,AppID,AppSecret 换取令牌(Access_Token)

  3. 使用令牌(Access_Token)访问功能性接口获取用户资料

微信的授权机制文档比起其它两家还是很清晰的,跟着文档往下走,没啥大坑,需要注意的是用户头像和刷新Token的问题

用户头像问题
刷新Token

通过CODE获取到的Access_Token,默认有效期为2个小时,当令牌快过期前,可以使用Refresh_Token刷新Token的过期时间,在Access_Token有效期内刷新不会改变令牌值,只更新有效时间,此外Refresh_Token也是有过期时间的(默认30天),需要在Refresh_Token过期之前进行续期,否则需要用户重新授权。

微博

OAuth2.0第三方登陆总结 | 开发日常

微博的授权机制与微信大同小异,都基于OAuth2.0授权机制,只不过与微信不同的是,微博的文档写的太渣了,实际使用中好几处与文档是相反的,这一点需要小心!

  1. 获取CODE,即获取客户端授权码

  2. 使用客户端授权码CODE,AppKey,AppSecret 换取令牌(Access_Token)

  3. 使用令牌(Access_Token)访问功能性接口获取用户资料

微博授权注意事项
  1. 头像会失效,微博中也存在这个问题,解决方法跟微信授权中提到的一样

  2. 微博中给的Access_Token也存在过期时间,与微信一样微博也提供了刷新机制

  3. 微博提供的users/show获取用户信息接口,文档中所给的参数不全,除了下图中提到的参数外,还需要额外加一个source参数,即应用的AppKey,表明请求来源。


腾讯

介绍了前面两个OAuth2.0的实例,最后这个腾讯QQ也就没啥可说的了,步骤还是那些步骤,问题也是那几个问题(头像,刷新token),唯一需要说明的是QQ这货有两个平台可以完成第三方登陆,一个是「QQ互联」,另一个是「腾讯开放平台」,这两个地方都能创建互联应用,前者的文档要比后者完备的多,并且也更有调理,不过有意思的是在「QQ互联」中创建应用最终也会导向开放平台,但不知道为什么又要把它们割裂开来。

-完-

你还可以看:














参考引用


以上是关于OAuth2.0第三方登陆总结 | 开发日常的主要内容,如果未能解决你的问题,请参考以下文章

关于百度oauth2.0登陆的诸多问题

spring security oauth2.0 实现

从0开始设计Oauth2.0 - 授权码模式

spring security oauth2.0 实现

OAuth2.0原理和验证流程分析

oauth