Amazon Cognito
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

TOKEN 终端节点

/oauth2/token 终端节点获取用户的令牌。

POST /oauth2/token

/oauth2/token 终端节点只支持 HTTPS POST。用户池客户端直接对此终端节点发出请求,而不通过系统浏览器。

注意

如果令牌终端节点响应包含一个刷新令牌,则放弃以前的刷新令牌,使用新返回的刷新令牌。

标头中的请求参数

授权

如果向客户端发布了密钥,则客户端必须通过基本 HTTP 授权在其授权标头中传递 client_idclient_secret。密钥是基本 Base64Encode(client_id:client_secret)

Content-Type

必须始终为 'application/x-www-form-urlencoded'

正文中的请求参数

grant_type

授予类型。

必须为 authorization_coderefresh_tokenclient_credentials

必需

client_id

客户端 ID。

必须是用户池中的预注册客户端。必须为客户端启用了 Amazon Cognito 联合。

如果客户端是公有的且没有密钥,则为必需。

scope

可以是任何与客户端关联的自定义范围的组合。请求的任意范围必须预先与客户端关联,否则它将在运行时被忽略。如果客户端不请求任何范围,则身份验证服务器使用与客户端关联的所有自定义范围。

可选。仅当 grant_typeclient_credentials 时使用。

redirect_uri

必须是在 /oauth2/authorize 中用于获取 authorization_code 的相同 redirect_uri

仅当 grant_typeauthorization_code 时必需。

refresh_token

刷新令牌。

如果 grant_typerefresh_token,则必需。

code

如果 grant_typeauthorization_code,则必需。

code_verifier

证明密钥。

如果 grant_typeauthorization_code 并且使用 PKCE 请求了授权代码,则必需。

肯定请求示例

为获取令牌交换授权代码

示例请求

POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token& Content-Type='application/x-www-form-urlencoded'& Authorization=Basic aSdxd892iujendek328uedj grant_type=authorization_code& client_id=djc98u3jiedmi283eu928& code=AUTHORIZATION_CODE& redirect_uri=com.myclientapp://myclient/redirect

示例响应

HTTP/1.1 200 OK Content-Type: application/json { "access_token":"eyJz9sdfsdfsdfsd", "refresh_token":"dn43ud8uj32nk2je", "id_token":"dmcxd329ujdmkemkd349r", "token_type":"Bearer", "expires_in":3600 }

为获取访问令牌交换客户端凭证

示例请求

POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token > Content-Type='application/x-www-form-urlencoded'& Authorization=Basic aSdxd892iujendek328uedj grant_type=client_credentials& scope={resourceServerIdentifier1}/{scope1} {resourceServerIdentifier2}/{scope2}

示例响应

HTTP/1.1 200 OK Content-Type: application/json { "access_token":"eyJz9sdfsdfsdfsd", "token_type":"Bearer", "expires_in":3600 }

为获取令牌交换具有 PKCE 的授权代码授予

示例请求

POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token Content-Type='application/x-www-form-urlencoded'& Authorization=Basic aSdxd892iujendek328uedj grant_type=authorization_code& client_id=djc98u3jiedmi283eu928& code=AUTHORIZATION_CODE& code_verifier=CODE_VERIFIER& redirect_uri=com.myclientapp://myclient/redirect

示例响应

HTTP/1.1 200 OK Content-Type: application/json { "access_token":"eyJz9sdfsdfsdfsd", "refresh_token":"dn43ud8uj32nk2je", "id_token":"dmcxd329ujdmkemkd349r", "token_type":"Bearer", "expires_in":3600 }

为获取令牌交换刷新令牌

示例请求

POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token > Content-Type='application/x-www-form-urlencoded' Authorization=Basic aSdxd892iujendek328uedj grant_type=refresh_token& client_id=djc98u3jiedmi283eu928& refresh_token=REFRESH_TOKEN

示例响应

HTTP/1.1 200 OK Content-Type: application/json { "access_token":"eyJz9sdfsdfsdfsd", "refresh_token":"dn43ud8uj32nk2je", "id_token":"dmcxd329ujdmkemkd349r", "token_type":"Bearer", "expires_in":3600 }

否定请求示例

错误响应示例

HTTP/1.1 400 Bad Request Content-Type: application/json;charset=UTF-8 { "error":"invalid_request|invalid_client|invalid_grant|unauthorized_client|unsupported_grant_type|" }
invalid_request

请求缺少必需的参数、包括不支持的参数值 (除了 unsupported_grant_type 之外) 或者格式错误。例如,grant_typerefresh_token 但未包括 refresh_token

invalid_client

客户端身份验证失败。例如,客户端的授权标头中包含 client_idclient_secret,但没有这样的客户端带有 client_idclient_secret

invalid_grant

已撤销刷新令牌。

授权代码已使用或不存在。

unauthorized_client

客户端不允许代码授予流或刷新令牌。

unsupported_grant_type

如果 grant_typeauthorization_coderefresh_token 之外的任意内容,则返回。

本页内容: