如何撤消 Amazon Cognito 颁发的刷新令牌?

2 分钟阅读
0

我想要使用 API 或端点来撤消由 Amazon Cognito 生成的刷新令牌。

解决方法

您可以使用 API 和端点来撤消由 Amazon Cognito 生成的刷新令牌。

**注意:**您可以实时撤消刷新令牌,这样这些刷新令牌就不能生成访问令牌

撤消刷新令牌的先决条件

为应用客户端启用令牌撤消,以撤消该应用客户端颁发的刷新令牌。默认情况下,当您创建新的 Amazon Cognito 用户群体客户端时,EnableTokenRevocation 参数处于启用状态。在撤消现有用户群体客户端的令牌之前,请在 UpdateUserPoolClient API 操作中启用令牌撤消。请包括您的应用客户端中的当前设置,并将 EnableTokenRevocation 参数设置为 true

启用令牌撤消设置时,origin_jtijti 声明将添加到访问令牌和 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>的密钥哈希”错误?

端点错误

有关端点错误的详细信息,请参阅撤消端点并查看撤消错误响应下的信息。

AWS 官方
AWS 官方已更新 1 年前