• 从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 参数
  • 相关阅读:
    mysql执行sql脚本
    Eclipse Memory Analyzer 进行堆转储文件分析
    JAVA字符串格式化-String.format()
    rpm 使用
    md5sum 使用
    Spring Security 初探
    java工厂模式
    Linux 定时任务
    Java Map 知识
    【转】MVC 比较
  • 原文地址:https://www.cnblogs.com/zhoushiya/p/12107649.html
Copyright © 2020-2023  润新知