检索访问令牌和刷新令牌
设备授权请求返回响应之后,应立即向令牌终端节点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部分进行实现
设备令牌错误
如果设备令牌响应格式错误或服务器出现问题,则返回错误信息:
错误代码 | 描述 |
---|---|
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
提交刷新令牌的响应属于设备令牌响应。