Oauth2.0 获得access_token以后

来源:互联网 发布:怎么设置软件锁 编辑:程序博客网 时间:2024/06/06 19:09

引言

前段时间写了一篇博客 OAuth2.0的学习和实践,以新浪微博为例,简述了Oauth2.0的授权流程和使用方法。

我们使用第三方账户登录,一般是要绑定本地用户使用的。所以,我们在授权成功之后,还面临一个问题,如何标识本地的账户

授权过程分析

微博和微信账户接入

一次成功的授权流程可分为以下几步:

  1. 开发者提供第三方登录按钮
  2. 用户点击登录,去第三方授权(微博,QQ,微信等)
  3. 授权完成,跳转到开发者提供的callback地址,并给出code参数。
  4. 开发者使用上一步的code参数,向第三方发送请求,并获得access_token和其他信息。

第四步返回的信息如下:

微博

{ "access_token":"ACCESS_TOKEN", "expires_in":157679999, "remind_in"=>"157679999","uid"=>"USER_ID"}

微信

{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN","openid":"OPENID", "scope":"SCOPE","unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"}

微博和微信的授权流程是一样的,不过其返回值有较大不同。

QQ账户接入

QQ账号接入的流程,比上面多了一步

5.使用上面流程第4步获得的access_token,向QQ服务器发送请求,得到openid参数。

返回结果是:

{"client_id":"YOUR_APPID","openid":"YOUR_OPENID"}

结论

微博账户使用uid参数,微信和QQ使用openid参数绑定本地账户。

微信和QQ的openid参数是针对不同站点(实际上是根据app_key)生成的唯一标识。这个参数是较难被别人知道的,所以比较安全。

然而微博的uid参数使用的就是用户的id编号,获取一个用户的微博id编号是很容易实现的事情,所以存在重放攻击的漏洞。

微博授权漏洞参考乌云的微博:注意!你的各种“账号”最近可能被轻松黑掉

如果是使用微博登录的话,在上面流程的第四部。
我们获取到了access_token和uid参数,此时我们需要使用access_token向接口https://api.weibo.com/oauth2/get_token_info发送请求,获得uid参数,然后与上述参数进行比对,再进行授权。

可参考文档:http://open.weibo.com/wiki/Oauth2/get_token_info

现在主要用到的社交网站就是微博,微信和QQ,所以只分析了以上三种情况,微信和QQ是一家公司,使用的技术比较类似,他们给出的openid具有唯一性和保密性,可以直接用来判断;而微博登录的情况,需要使用uid标识用户,而uid很容易被别人得知,所以我们还需要多做一次操作,来验证access_token的合法性。

0 0