我想要使用 API 或端点来撤消由 Amazon Cognito 生成的刷新令牌。
解决方法
您可以使用 API 和端点来撤消由 Amazon Cognito 生成的刷新令牌。
**注意:**您可以实时撤消刷新令牌,这样这些刷新令牌就不能生成访问令牌。
撤消刷新令牌的先决条件
为应用客户端启用令牌撤消,以撤消该应用客户端颁发的刷新令牌。默认情况下,当您创建新的 Amazon Cognito 用户群体客户端时,EnableTokenRevocation 参数处于启用状态。在撤消现有用户群体客户端的令牌之前,请在 UpdateUserPoolClient API 操作中启用令牌撤消。请包括您的应用客户端中的当前设置,并将 EnableTokenRevocation 参数设置为 true。
启用令牌撤消设置时,origin_jti 和 jti 声明将添加到访问令牌和 ID 令牌中。
- jti 声明为 JSON 网络令牌 (JWT) 提供唯一标识符。
- jti 声明用于防止 JWT 重播。
- jti 值是区分大小写的字符串。
- 当使用 REFRESH_TOKEN 身份验证流生成新的访问令牌和 ID 令牌时,新的访问令牌和 ID 令牌会具有相同的 origin_jti 声明。jti 声明不同。
有关详细信息,请参阅启用令牌撤消和将令牌与用户群体结合使用。
撤消刷新令牌的预期结果
有关撤消刷新令牌时会发生什么(包括对访问令牌和 JWT 的影响)的信息,请参阅撤消令牌和 RevokeToken。
**注意:**有关 JWT 的详细信息,请参阅验证 JSON Web 令牌。
使用 RevokeToken API 调用撤消刷新令牌
要撤消的刷新令牌、应用客户端 ID 以及客户端密钥是调用 RevokeToken API 的必需参数。
**注意:**只有当客户端 ID 具有密钥时,才需要客户端密钥。
请求语法:
{
"ClientId": "string",
"ClientSecret": "string",
"Token": "string"
}
AWS 命令行界面 (AWS CLI) 命令示例:
**注意:**请将 token <value> 替换为您的令牌信息。请将 client-id <value> 替换为您的客户端 ID。请将 client-secret <value> 替换为您的应用客户端密钥。
aws cognito-idp revoke-token
--token <value>
--client-id <value>
--client-secret <value>
**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 AWS CLI。
curl 命令示例:
**注意:**请将 <region> 替换为您的 AWS 区域。请将 <refresh token> 替换为您的令牌信息。请将 <client-id> 替换为您的客户端 ID。
awscurl \
-v \
-X POST \
--service cognito-idp \
--region <region> \
-H 'X-Amz-Target: AWSCognitoIdentityProviderService.RevokeToken' \
-H 'Content-Type: application/x-amz-json-1.1' \
-d '{"ClientId": "<client-id>", "Token": "<refresh-token>"}' \
https://cognito-idp.<region>.amazonaws.com
使用撤消端点撤消刷新令牌
在您将域添加到用户群体后,/oauth2/revoke 端点可用。端点撤消令牌后,您无法使用已撤消的令牌访问 Amazon Cognito 令牌进行身份验证的 API。有关 /oauth2/revoke 端点的信息,包括请求参数,请参阅撤消端点。
示例 1: 使用没有应用密钥的应用客户端撤消令牌:
**注意:**请将 <region> 替换为您的 AWS 区域。请将 <refresh token> 替换为您的刷新令牌信息。请将 <client-id> 替换为您的客户端 ID。
POST /oauth2/revoke HTTP/1.2
Host: https://mydomain.auth.<region>.amazoncognito.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
token=<refresh token>&
client_id=<client-id>
示例 2: 使用具有应用密钥的应用客户端撤消令牌:
POST /oauth2/revoke HTTP/1.2
Host: https://mydomain.auth.<region>.amazoncognito.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
token=<refresh token>
如需了解如何设置授权标头,请参阅如何解决用户群体中的“无法验证客户端 <client-id>的密钥哈希”错误?
端点错误
有关端点错误的详细信息,请参阅撤消端点并查看撤消错误响应下的信息。