检索访问令牌和刷新令牌

检索访问令牌和刷新令牌

设备授权请求返回响应之后,应立即向令牌终端节点https://api.amazon.com/auth/o2/token提出设备令牌请求以获取用户访问令牌。

终端节点的轮询间隔不得超过设备授权响应中的间隔值。轮询终端节点,直到收到访问令牌、用户拒绝请求或者device_code失效(设备授权响应参数expires_in中的值)。

用户输入代码前,设备令牌响应将仅返回 authorization_pending。用户成功输入代码后,设备令牌响应将包含访问令牌和刷新令牌。

设备令牌请求

要向Login with Amazon请求用户的访问令牌,必须向https://api.amazon.com/auth/o2/token作出安全的HTTP POST请求,并包含以下参数:

参数 描述
grant_type 必需。此情景下必须使用device_code才能继续。
device_code 必需。Login with Amazon在设备授权响应中返回的device_code值。
user_code 必需。Login with Amazon在设备授权响应中返回的user_code值。

例如:

POST /auth/o2/token HTTP/1.1
Host: api.amazon.com
Content-Type: application/x-www-form-urlencoded

user_code=AAYJHL&device_code=B66fd882-7405-4e9a-bfb9&grant_type=device_code

设备令牌请求按照OAuth 2.0设备流程规范的3.4部分进行实现。

设备令牌响应

用户输完代码之后,从Login with Amazon收到的设备令牌响应将包含以下参数:

参数 描述
access_token 字符串。用户的访问令牌。最大不超过2048字节。
refresh_token 字符串。刷新令牌可用于获取新的访问令牌。最大不超过2048字节。
token_type 字符串。始终为不记名。
expires_in 整值。访问令牌的有效秒数。

例如:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "2YomnFZEjfjklsadjkwpAA",
    "token_type": "bearer",
    "expires_in": 3600,
    "refresh_token": "nGzv3JORFQXG3x21KW1a"
}

设备令牌响应按照OAuth 2.0设备流程规范的3.5部分进行实现

设备令牌错误

如果设备令牌响应格式错误或服务器出现问题,则返回错误信息:

</colgroup>
错误代码 描述
invalid_request 请求中缺少必要参数、具有无效值,或格式不正确。
invalid_client 客户端身份验证失败。授权服务未返回HTTP 401(未授权)状态代码的情况下将使用此代码。
invalid_grant 授权授予或刷新令牌无效、过期、已撤销,与设备令牌请求不匹配,或发送至其他客户端。
unauthorized_client 完成身份验证的客户端未获得执行设备令牌请求的授权。
unsupported_grant_type 指示了错误的token_type。必须为不记名。

设备令牌响应可能还包括仅限于此类令牌请求的错误:

错误代码 描述
authorization_pending 用户未在验证URL中输入用户代码。
slow_down 设备轮询过快。设备令牌请求的发出频率仅限于设备授权请求中所指示的间隔。
expired_token device_code已过期。您需要创建新的设备授权请求。

请注意,如果您正在解决错误{"error_description":"The request is missing a required parameter : client_secret","error":"invalid_request"},本文档假定您在设备设置中创建设置时已获取client_id。此过程不会发放client_secret。请参阅使用刷新令牌,了解关于获取LwA刷新令牌的有关内容。

使用刷新令牌

访问令牌在设定时间过后将失效(通常将返回expires_in参数)。获取访问令牌后还会收到一个刷新令牌。您可以使用刷新令牌来检索新的访问令牌。

要提交刷新令牌,客户端将向https://api.amazon.com/auth/o2/token作出安全的HTTP POST,其中包含以下参数:

参数 描述
grant_type 必需。请求的授权访问类型。必须为refresh_token
refresh_token 必需。由初始访问令牌响应返回的刷新令牌。
client_id 必需。客户端标识符。应与设备授权请求中包含的client_id相匹配。

例如:

POST /auth/o2/token HTTP/1.1
Host: api.amazon.com
Content-Type: application/x-www-form-urlencoded;charset=UTF-8

grant_type=refresh_token&refresh_token=Atzr|IQEBLzAtAhRPpMJxdwVz2Nn6f2y-tpJX2DeX...&client_id=foodev

提交刷新令牌的响应属于设备令牌响应