oauth2.0中登陆时怎么更新手机令牌动态密码以及手机令牌动态密码过期后怎么处理

周末逛简书,看了一篇写的极好的文章,点击大红心点赞,就直接给我跳转到登录界面了,原来点赞是需要登录的。

可是没有我并没有简书账号,一直使用的QQ的集成登录。下面有一排社交登录按钮,我们可以用第三方社交账号登陆即可。点击QQ图标,就给我跳转到了QQ登录授权页面,如下图:

从图片上我们可以看到主要包括两个部分,一个是左边的用户登录,一个是右边告知简书将获取哪些权限。输入QQ账号和密码,点击授权并登录,就成功登录到简书了,并成功获取到了我QQ的账号和昵称,如下图:

无图无真相,咱们看看控制台的网络监控:

如图所示,除了scope参数外,其他四个参数均有传参。
此时你可能唯一对state参数比较迷惑,传递一个state参数,认证服务器会原封不动返回,那还干嘛要传递state参数呢?

我的理解是,简书用一个guid加长版字符串来唯一标识一个授权请求。这样才会正确获取授权服务器返回的授权码。

这里你可能会问了,既然我知道了这些参数,我岂不是可以伪造简书认证请求,修改redirect_uri参数跳转到个人的网站,然后不就可以获取QQ授权?

跟我一样太傻太天真,简书在QQ互联平台申请时肯定已经预留备案了要跳转返回的URL。QQ互联平台在收到简书的授权请求时肯定会验证回调Url的。

和之前的授权请求URL进行对比,可以发现redirect_uristate完全一致。

发送完该请求后,认证服务器验证通过后就会发放令牌,并跳转会简书,其中应该包含以下信息:

这个时候简书还有一件事情要做,就是把用户token写到cookie里,进行用户登录状态的维持。咱们还是打开控制器验证一下。

不用打cookie的歪主意了,肯定是加密了的。
可以尝试下手动把remember_user_token这条cookie删除,保证刷新界面后需要你重新登录简书。




和第四步返回的结果一样。

这里你可能又有疑问了,那既然每次进行令牌延期后都会重新返回一个refresh_token,那岂不是我可以使用refresh_token无限延期?
天真如我啊,refresh_token也是有过期时间的。而这个过期时间具体是由认证服务器决定的。

假设简书从QQ互联平台默认获取到的access_token的有效期是1天,refresh_token的有效期为一周。

用户今天使用QQ登录授权后,过了两天再去逛简书,简书发现token失效,立马用refresh_token刷新令牌,默默的完成了授权的延期。
假如用户隔了两周再去逛简书,简书一核对,access_tokenrefresh_token全都失效,就只能乖乖引导用户到授权页面重新授权,也就是回到OAuth2.0的第一步。

本文以简书通过QQ进行授权登录为例,对OAuth2.0 的授权流程进行了梳理,希望通读此文,对你有所帮助。

如果对OAuth2.0有所了解的话,你应该明白本文其实是对OAuth2.0中授权码模式授权方式的讲解。

如果想了解OAuth2.0其他几种授权方式,建议参考。

阅罢此文,如果您觉得本文不错并有所收获,您可以通过右边的【打赏】按钮进行打赏给予鼓励,或点击【推荐】进行精神赞助,也可【评论】留下您的问题或建议与我交流。
您的支持是我不断创作和分享的不竭动力!

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

周末逛简书,看了一篇写的极好的文章,点击大红心点赞,就直接给我跳转到登录界面了,原来点赞是需要登录的。

可是没有我并没有简书账号,一直使用的QQ的集成登录。下面有一排社交登录按钮,我们可以用第三方社交账号登陆即可。点击QQ图标,就给我跳转到了QQ登录授权页面,如下图:

从图片上我们可以看到主要包括两个部分,一个是左边的用户登录,一个是右边告知简书将获取哪些权限。输入QQ账号和密码,点击授权并登录,就成功登录到简书了,并成功获取到了我QQ的账号和昵称,如下图:

无图无真相,咱们看看控制台的网络监控:

如图所示,除了scope参数外,其他四个参数均有传参。
此时你可能唯一对state参数比较迷惑,传递一个state参数,认证服务器会原封不动返回,那还干嘛要传递state参数呢?

我的理解是,简书用一个guid加长版字符串来唯一标识一个授权请求。这样才会正确获取授权服务器返回的授权码。

这里你可能会问了,既然我知道了这些参数,我岂不是可以伪造简书认证请求,修改redirect_uri参数跳转到个人的网站,然后不就可以获取QQ授权?

跟我一样太傻太天真,简书在QQ互联平台申请时肯定已经预留备案了要跳转返回的URL。QQ互联平台在收到简书的授权请求时肯定会验证回调Url的。

和之前的授权请求URL进行对比,可以发现redirect_uristate完全一致。

发送完该请求后,认证服务器验证通过后就会发放令牌,并跳转会简书,其中应该包含以下信息:

这个时候简书还有一件事情要做,就是把用户token写到cookie里,进行用户登录状态的维持。咱们还是打开控制器验证一下。

不用打cookie的歪主意了,肯定是加密了的。
可以尝试下手动把remember_user_token这条cookie删除,保证刷新界面后需要你重新登录简书。




和第四步返回的结果一样。

这里你可能又有疑问了,那既然每次进行令牌延期后都会重新返回一个refresh_token,那岂不是我可以使用refresh_token无限延期?
天真如我啊,refresh_token也是有过期时间的。而这个过期时间具体是由认证服务器决定的。

假设简书从QQ互联平台默认获取到的access_token的有效期是1天,refresh_token的有效期为一周。

用户今天使用QQ登录授权后,过了两天再去逛简书,简书发现token失效,立马用refresh_token刷新令牌,默默的完成了授权的延期。
假如用户隔了两周再去逛简书,简书一核对,access_tokenrefresh_token全都失效,就只能乖乖引导用户到授权页面重新授权,也就是回到OAuth2.0的第一步。

本文以简书通过QQ进行授权登录为例,对OAuth2.0 的授权流程进行了梳理,希望通读此文,对你有所帮助。

如果对OAuth2.0有所了解的话,你应该明白本文其实是对OAuth2.0中授权码模式授权方式的讲解。

如果想了解OAuth2.0其他几种授权方式,建议参考。

阅罢此文,如果您觉得本文不错并有所收获,您可以通过右边的【打赏】按钮进行打赏给予鼓励,或点击【推荐】进行精神赞助,也可【评论】留下您的问题或建议与我交流。
您的支持是我不断创作和分享的不竭动力!

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

[[[[注]]]] 本文所有代码中的大写字母部分为需要用户自己填写的。

申请应用时分配的app_key
授权回调地址,必须和应用注册的地址一致
主要用于指定手机授权页的版本,无此参数默认显示pc授权页面
用来换取accesstoken的授权码,有效期为10分钟
用户统一标识,可以唯一标识一个用户
与openid对应的用户key,是验证openid身份的验证密钥
申请应用时分配的app_key
授权回调地址,必须和应用注册的地址一致
用于保持请求和回调的状态,授权请求成功后原样带回给第三方。该参数用于防止csrf攻击(跨站请求伪造攻击),强烈建议第三方带上该参数。参数设置建议为简单随机数+session的方式
accesstoken过期时间,以返回的时间的准,单位为秒,注意过期时提醒用户重新授权
申请应用时分配的app_key
授权回调地址,必须和应用注册的地址一致
授权类型,为token
主要用于指定手机授权页的版本,无此参数默认显示pc授权页面
accesstoken过期时间,以系统返回的过期时间为准,注意过期时提醒用户重新授权
用户统一标识,可以唯一标识一个用户
与openid对应的用户key,是验证openid身份的验证密钥

Oauth2中,access_token的有效期不是无限的,当第三方应用使用的access_token时间超过了其生命周期时,可以通过刷新机制来获取新的access_token。

申请应用时分配的app_key
access_token过期时间,以系统返回的过期时间为准,注意过期时提醒用户重新授权

通过刷新机制可以延长access_token有效期,每次刷新延长的access_token有效期与授权时access_token的有效期一致,多次刷新可将access_token的有效期延长至一年。

OAuth的认证和授权的过程中涉及的三方包括:
  服务商:用户使用服务的提供方。
  用  户:服务商的用户
  第三方:通常是网站,该网站想要访问用户存储在服务商那里的信息。

比如我现在正在开发一个访问新浪微博好友信息的客户端,现将其称之为Aita。


  服务提供商:新浪微博
  用户:就是我了,如果你使用我的客户端就是你了,总之就是我的客户端Aita的使用者。
  第三方:就是我开发的这个客户端Aita

  在认证过程之前,第三方需要先向服务商申请第三方服务的唯一标识。就是我要开发的这个客户端Aita首先需要在新浪的开发者平台注册一下获得一个Appkey。


OAuth认证和授权的过程如下:
  1、我(用户)使用Aita(第三方)想看看我的好友发表了什么微博,然后顺便点个赞。
  2、Aita(第三方向)首先向服务商(新浪微博)请求一个临时令牌。
  3、服务商(新浪微博)验证第三方(Aita)的身份后,授予一个临时令牌(Code)。
  4、第三方(Aita)获得临时令牌(Code)后,将用户导向至服务商的授权页面请求用户授权,然后这个过程中将临时令牌(Code)和第三方(Aita)的返回地址(回调地址)发送给服务商。
  5、用户在服务商(新浪微博)的授权页面上输入自己的用户名和密码,授权第三方(Aita)访问所相应的资源(查看好友动态)。
  6、验证成功后,服务商(新浪微博)将用户导向第三方(Aita)的返回地址(回调地址--是我在新浪开发者平台上填写的)。
  7、第三方(Aita)根据临时令牌(Code)从服务商(新浪微博)那里换取访问令牌(AccessToken)。
  8、服务商(新浪微博)根据令牌和用户的授权情况授予第三方(Aita)访问令牌。
  9、第三方(Aita)使用获取到的访问令牌访问存放在服务商(新浪微博)的对应的用户资源。

参考资料

 

随机推荐