Oauth2.0 获得access_token以后
来源:互联网 发布:怎么设置软件锁 编辑:程序博客网 时间:2024/06/06 19:09
引言
前段时间写了一篇博客 OAuth2.0的学习和实践,以新浪微博为例,简述了Oauth2.0的授权流程和使用方法。
我们使用第三方账户登录,一般是要绑定本地用户使用的。所以,我们在授权成功之后,还面临一个问题,如何标识本地的账户。
授权过程分析
微博和微信账户接入
一次成功的授权流程可分为以下几步:
- 开发者提供第三方登录按钮
- 用户点击登录,去第三方授权(微博,QQ,微信等)
- 授权完成,跳转到开发者提供的callback地址,并给出code参数。
- 开发者使用上一步的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的合法性。
- Oauth2.0 获得access_token以后
- 如何用Spring OAuth2.0 Client组件获取授权access_token
- 自动获得access_token
- IOS最新新浪微博开放平台Oauth2.0授权获取Access_Token
- IOS最新新浪微博开放平台Oauth2.0授权获取Access_Token(通用)
- 【OAuth2.0网页授权】根据code获取access_token和openId(Senparc.Weixin.MP.dll)
- 【OAuth2.0网页授权】根据access_token和openId获取用户基本信息(Senparc.Weixin.MP.dll)
- 新浪微博开发获得OAuth2.0授权的经历
- 通过OAuth2.0方式弹出授权页面获得用户基本信息
- 新浪开放平台---用code获取access_token(oauth2)
- 微信公众平台 OAuth Access_Token获得
- 微信开发1---------------------获得access_token
- OAuth2.0
- OAuth2.0
- OAuth2.0
- OAuth2.0
- oauth2.0
- oauth2.0
- Qt之QSS(QDarkStyleSheet)
- iOS实现微信授权登陆
- String/StringBuffer/StringBuilder详细对比
- 输出文件和原文件大小不同
- CSS-Float全解析
- Oauth2.0 获得access_token以后
- 002——struts的文件上传功能
- LeetCode - 29. Divide Two Integers
- java垃圾回收机制分析
- 319. Bulb Switcher
- Python入门:Django错误(1146,Table 'blog.django_session' doesn't exist")
- MySQL 加锁处理分析
- python模块之os模块
- GaoJueYi 【2016.07.13初中部 NOIP普及组 】模拟赛总结