OAuth2:客户端验证授权(Resource Owner Password)类型的开放授权

    xiaoxiao2021-04-13  32

    适用范围

    这种模式会直接将用户密码暴露给应用程序,因此应谨慎使用。一般说来,只有信任度极高的客户才应授权使用该模式,如官方移动应用、操作系统或高权限程序。

    流程剖析

    为了阐述该授权类型的认证过程,我们以Salesforce中基于REST的API为例进行说明。

    1. 向用户索要认证信息

    首先,我们必须得让用户将认证信息提供给应用程序。对于Salesforce来说,如果用户处于不可信的网络中时,除了需要输入用户名和密码外,还需要用户提供一个安全令牌作为用户的第三个输入。

    2. 交换访问令牌

    这里的访问令牌交换过程与授权码类型的验证授权(authorization code)很相似。我们要做的就是向认证服务器提交一个POST请求并在其中提供相应的认证和客户信息。

    你可以通过查阅API文档得到认证服务器的URL,如Salesforce的URL为:

    https://login.salesforce.com/services/oauth2/token

    下面是所需的POST参数: 

    grant_type

    该模式下为“password”

    scope

    业务访问控制范围,这在Salesforce中是不需要的,但对其其他的API来说则是一个可选参数

    client_id

    应用注册时获得的客户id

    client_secret

    应用注册时获得的客户密钥

    username

    用户的用户名,以UTF-8编码

    password

    用户的密码,以UTF-8编码。对于Salesforce,还需将安全令牌串连起来。

    以下是一个通过命令行HTTP客户端curl发起的请求示例:

    1 2 3 4 5 6 curl -d  "grant_type=password"  \ -d  "client_id=3MVG9QDx8IKCsXTFM0o9aE3KfEwsZLvRt"  \ -d  "client_secret=4826278391389087694"  \ -d  "username=ryan@ryguy.com"  \ -d  "password=_userspassword__userssecuritytoken_"  \ https: //login .salesforce.com /services/oauth2/token

    如果用户提供的认证信息正确,则Salesforce的OAuth认证服务器会返回一段application/json数据并包含access_token:

    1 2 3 4 5 6 7 {      "id":"https://login.salesforce.com/id/00DU0000000Io8rMAC/005U0000000hMDCIA2",      "issued_at":"1316990706988",      "instance_url":"https://na12.salesforce.com",      "signature":"Q2KTt8Ez5dwJ4Adu6QttAhCxbEP3HyfaTUXoNI=",      "access_token":"00DU0000000Io8r!AQcKbNiJPt0OCSAvxU2SBjVGP6hW0mfmKH07QiPEGIX" }

    这些响应参数有什么含义呢?

    access_token

    用于访问API接口的访问令牌。这是该响应中唯一需要的内容

    id(Salesforce中的特有项)

    用户的唯一身份

    instance_url

    访问API时的URL前缀

    ‍‍signature‍‍

    一个签名,用于验证URL在传输过程中没有被篡改

    issued_at(Salesforce中的特有项)

    签名生成的时间,用于验证

    3. 访问API

    仅以一个示例作为演示:

    1 2 curl -d "q=SELECT+name+FROM+Account"\ -H 'Authorization: Bearer 00DU0000000Io8r!AQcAQKJ.Cg1dCBCVHmx2.Iu3lroPQBV2P65_jXk'
    转载请注明原文地址: https://ju.6miu.com/read-668826.html

    最新回复(0)