从bbs.3dmgame.com与qq的登录解析oauth2.0协议

  1. 点击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

  1. 授权码(认证码)模式 (Authorization code) response_type=code
  2. 简化(隐形)模式 (Impilict) response_type=token
  3. 用户名密码模式 (Resource Owner Password Credential) grant_type=password
  4. 客户端模式 (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需要获取哪几种业务授权

  1. 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自己进行验证

  1. 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约定的加密字符串

  1. qq会返回access_token信息给3dm,例如:
{
    "access_token":"jj9gwvgk49gjvfdfg34ggbv",
    "token_type":"Bearer",
    "expireds_seconds":3600
}

3dm拿到access_toekn后与当前用户进行关联保存

    1. 当3dm需要去qq获取用户信息时,可以拿access_token与用户标识去请求qq,例如:
      链接 graph.qq.com/oauth2/get_user_info 参数
原文地址:https://www.cnblogs.com/zhoushiya/p/12107649.html