• 《HTTP


    最近都近没有更新博客了,卡在 oAuth 上了。

    之前公司做统一身份的认证,不了解 oAuth 的我在这卡了两天。

    于是决定仔细研究原理,理论指导实践。

    --

    什么是 oAuth ?

    简单来说 oAuth 是一种认证方式,现在普遍用于第三方的认证,比如 QQ ,微博 等实现的第三方接入。

    --

    oAuth 流程?

    首先推荐阮老师的教程:理解OAuth 2.0

    这里我只是说明一个我对 oAuth 过程的理解,具体的阮老师真的说的非常好。

    这里首先贴出一张图,摘自阮老师微博,摘自RFC 6749。

    我理解的 oAuth 具体分这几步骤!

    1:客户端发起认证请求【为了拿到code,做下一步的认证请求准备】

    理解:当你使用一个 QQ/微信 登录一个客户端时候,客户端会发起一个请求去 QQ/微信 的服务端发起第三方认证请求。

    下面是阮老师博客中一个例子

    GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz
            &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
    Host: server.example.com
    

    具体解释下这个 GET 请求中具体的参数意义

    response_type:表示授权类型,必选项,此处的值固定为"code"
    client_id:表示客户端的ID,必选项
    redirect_uri:表示重定向URI,服务端处理之后的数据会返回这个URL
    scope:表示申请的权限范围,可选项
    state:表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。
    

    2:服务端认证请求,通过返回 code【为了让客户端使用code来换Token】

    注意:为了保证安全,这个 code 的生命周期很短,时间根据服务端来指定。

    HTTP/1.1 302 Found
    Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA
              &state=xyz

    3:客户端使用获取到的 code 换取 Token(令牌)【为了获取Token来使用服务】

    POST /token HTTP/1.1
    Host: server.example.com
    Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
    &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
    

    具体解释下这个 POST 请求中具体的参数意义

    grant_type:表示使用的授权模式,必选项,此处的值固定为"authorization_code"。
    code:表示上一步获得的授权码,必选项。
    redirect_uri:表示重定向URI,必选项,且必须与A步骤中的该参数值保持一致。
    client_id:表示客户端ID,必选项。
    

    4:服务端返回 Token 用于第三方使用【为了让客户端使用Token来调用对应的服务】

    HTTP/1.1 200 OK
    Content-Type: application/json;charset=UTF-8
    Cache-Control: no-store
    Pragma: no-cache
    { "access_token":"2YotnFZFEjr1zCsicMWpAA", "token_type":"example", "expires_in":3600, "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA", "example_parameter":"example_value" }

    5:客户端拿到了 access_token ,就可以使用服务端提供的服务了

    --

    这里只讲解了一种正常的 oAuth 流程,oAuth 的知识远远不止这一点,需要的话还可以更深入的学习。

    一定要知道 oAuth 的流程在去练习,否则真的会把你搞蒙。

  • 相关阅读:
    ANDROID_MARS学习笔记_S04_004_用HTTPCLENT发带参数的get和post请求
    ANDROID_MARS学习笔记_S04_003_用HttpClent发http请求
    ANDROID_MARS学习笔记_S04_002_用AsyncTask实现异步操作
    ANDROID_MARS学习笔记_S04_001_OAUTH获取request_token
    ANDROID_MARS学习笔记_S04_001_OAuth简介
    ANDROID_MARS学习笔记_S03_009_GOOGLEMAP3
    ANDROID_MARS学习笔记_S03_008_GOOGLEMAP2
    ANDROID_MARS学习笔记_S03_007_GoogleMap1
    适配ios9出现的问题:-canOpenURL: failed for URL
    使用第三方SDK出现: duplicate symbol _llvm.cmdline in:
  • 原文地址:https://www.cnblogs.com/25-lH/p/8836290.html
Copyright © 2020-2023  润新知