从bbs.3dmgame.com与qq的登录解析oauth2.0协议
- 点击3dm上的qq图标,浏览器跳转到,地址为:
https://graph.qq.com/oauth2.0/show ?which=Login &display=pc &response_type=code &client_id=310192173 &redirect_uri=http%3A%2F%2Fbbs.3dmgame.com%2Fconnect.php%3Fmod%3Dlogin%26op%3Dcallback%26referer%3Dforum.php &state=3f0e9fafcd1765a11b3cf568ecf618e1 &scope=get_user_info%2Cadd_share%2Cadd_t%2Cadd_pic_t%2Cget_repost_list
a. which和display是相关的业务参数
b. response_type表示授权类型,此处为授权码类型response_type=code
- 授权码(认证码)模式 (Authorization code) response_type=code
- 简化(隐形)模式 (Impilict) response_type=token
- 用户名密码模式 (Resource Owner Password Credential) grant_type=password
- 客户端模式 (Client Credential) grant_type=client_credential
c. client_id为3dm在qqOAuth2.0业务中的客户端Id,需要3dm在qq后台业务中申请的client_id=310192173,这样qq能获取到当前客户端身份
d. redirect_uri为OAuth2.0验证成功后前端需要跳转的地址http://bbs.3dmgame.com/connect.php?mod=login&op=callback&referer=forum.php
e. state为防止csrf攻击参数,需要3dm自己对其进行验证
f. score为业务参数,表示3dm需要获取哪几种业务授权
- qq登录成功后,跳转地址为
http://bbs.3dmgame.com/connect.php ?receive=yes &mod=login &op=callback &referer=forum.php &code=DC62BCBFD75CAC20E8C41EAFE3A2D65D &state=4b8408f6a7e4b9c0d47b462339076178
实际上是前面redirect_uri地址加上了另外的参数,OAuth2.0通用参数有
a. code即授权码(authorization_code),后面3dm可以运用code去qq交换访问令牌(access_token)
b. state防csrf参数,需要3dm自己进行验证
- 3dm拿到access_token后去qq交换访问令牌,此行为是服务器之间传输,前端是看不到的
链接 graph.qq.com/oauth2/get_token
参数 code=DC62BCBFD75CAC20E8C41EAFE3A2D65D&redirect_uri=https%3a%2f%2fbbs.3dmgame.com&client_id=310192173&grant_type=authorization_code&client_secret=******
a. grant_type为授权类型,此处为授权码类型
b. client_secret为3dm与qq约定的加密字符串
- qq会返回access_token信息给3dm,例如:
{
"access_token":"jj9gwvgk49gjvfdfg34ggbv",
"token_type":"Bearer",
"expireds_seconds":3600
}
3dm拿到access_toekn后与当前用户进行关联保存
- 当3dm需要去qq获取用户信息时,可以拿access_token与用户标识去请求qq,例如:
链接 graph.qq.com/oauth2/get_user_info 参数
最新文章
- hortonworks2.5.3 install step log
- java 接口和抽象类的区别
- ui-router API
- @import导入外部样式表与link链入外部样式表的区别
- Linux磁盘管理之设备文件详解04
- ural 1073. Square Country
- 简约的单页应用引擎:sonnyJS
- 4-2.矩阵乘法的Strassen算法详解
- Linux企业级开发技术(2)——epoll企业级开发之epoll接口
- Cocos2dx 3.0 过渡篇(三十一)ValueVector和Vector不得不说的故事
- bug--Unable to add window –token is not valid; is your activity running?
- spring 动态创建数据源
- [算法题] Add Two Numbers
- 关于 redis.properties配置文件及rule
- PeopleSoft进程卡在“已排队”状态诊断和解决
- some knowledge of language
- oracle中计算某月的天数
- go make切片中len() 和 cap() 的差别
- 【python】列表&;&;元组&;&;字典
- ztree树的递归