

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 通过令牌撤销来结束用户会话
<a name="token-revocation"></a>

您可以使用以下方法撤销刷新令牌和最终用户会话。撤销刷新令牌后，先前由该刷新令牌颁发的所有访问令牌都将失效。向用户颁发的其他刷新令牌不受影响。

**RevokeToken 操作**  
[RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html)撤消给定刷新令牌的所有访问令牌，包括来自交互式登录的初始访问令牌。此操作不会影响用户的任何其他刷新令牌，也不会影响由这些其他刷新令牌派生的 ID 令牌和访问令牌。

**撤销端点**  
[撤销端点](revocation-endpoint.md)会撤销给定的刷新令牌以及该刷新令牌生成的所有 ID 令牌和访问令牌。此端点还会撤销交互式登录的初始访问令牌。对此端点的请求不会影响用户的任何其他刷新令牌，也不会影响由这些其他刷新令牌派生的 ID 令牌和访问令牌。

**GlobalSignOut 操作**  
[GlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GlobalSignOut.html)是一种自助操作，用户使用其访问令牌对其进行授权。此操作会撤销请求用户的所有刷新、ID 和访问令牌。

**AdminUserGlobalSignOut 操作**  
[AdminUserGlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUserGlobalSignOut.html)是管理员使用 IAM 凭证授权的服务器端操作。此操作会撤销目标用户的所有刷新、ID 和访问令牌。

**有关撤销令牌的需知信息**
+ 您撤销刷新令牌的请求必须包括用于获取该令牌的客户端 ID。
+ 用户池 JWTs 是独立的，其签名和到期时间是在创建令牌时分配的。已撤销令牌无法与任何需要令牌的 Amazon Cognito API 调用一起使用。但是，如果使用任何验证令牌签名和过期的 JWT 库进行验证，已撤销令牌仍然有效。
+ 当您创建新的用户池客户端时，默认会启用令牌撤销。
+ 您只能在启用令牌撤销的应用程序客户端中撤销刷新令牌。
+ 启用令牌吊销后，Amazon Cognito JSON Web 令牌中会添加新的声明。`origin_jti` 和 `jti` 声明已添加到访问和 ID 令牌中。这些声明增加应用程序客户端访问和 ID 令牌的大小。
+ 当您在之前已启用令牌撤销的应用程序客户端中禁用令牌撤销时，已撤销的令牌不会再次启用。
+ 当您[禁用用户账户](how-to-manage-user-accounts.md#manage-user-accounts-enable-disable)（会撤销刷新和访问令牌）后，如果您再次启用该用户账户，已撤销的令牌不会启用。
+ 使用 AWS 管理控制台、或 AWS API 创建新的用户池客户端时 AWS CLI，默认情况下会启用令牌撤销。

## 启用令牌撤销
<a name="enable-token-revocation"></a>

在您为现有的用户池客户端撤销令牌前，必须启用令牌撤销。您可以使用 AWS CLI 或 AWS API 为现有用户池客户端启用令牌撤销。为此，请调用 `aws cognito-idp describe-user-pool-client` CLI 命令或 `DescribeUserPoolClient` API 操作以从应用程序客户端检索当前设置。然后调用 `aws cognito-idp update-user-pool-client` CLI 命令或 `UpdateUserPoolClient` API 操作。包括来自您的应用程序客户端的当前设置并将 `EnableTokenRevocation` 参数设置为 `true`。

要使用 Amazon Cognito API 或软件开发工具包创建或修改启用令牌撤销功能的 AWS 应用程序客户端，请在[CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)您的[UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)或 API 请求中包含以下参数。

```
"EnableTokenRevocation": true
```

要在 Amazon Cognito 控制台中配置令牌撤销，请从用户池的**应用程序客户端**菜单中选择一个应用程序客户端。在**应用程序客户端信息**中选择**编辑**按钮，然后在**高级配置**下启用或禁用令牌撤销。

## 撤销令牌
<a name="revoke-tokens-api"></a>

您可以使用 [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html)API 请求撤消刷新令牌，例如使用 `[aws cognito-idp revoke-token](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/revoke-token.html)` CLI 命令。您也可以使用[撤销端点](revocation-endpoint.md)撤销令牌。此端点在您将域添加到用户池后可用。您可以在 Amazon Cognito 托管域或您的自定义域上使用撤销端点。

以下是示例 `RevokeToken` API 请求的正文。

```
{
   "ClientId": "1example23456789",
   "ClientSecret": "abcdef123456789ghijklexample",
   "Token": "eyJjdHkiOiJKV1QiEXAMPLE"
}
```

以下是对使用自定义域的用户池的 `/oauth2/revoke` 端点发出的 cURL 请求示例。

```
curl --location 'auth.mydomain.com/oauth2/revoke' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic Base64Encode(client_id:client_secret)' \
--data-urlencode 'token=abcdef123456789ghijklexample' \
--data-urlencode 'client_id=1example23456789'
```

除非您的应用程序客户端具有客户端密钥，否则 `RevokeToken` 操作和 `/oauth2/revoke` 端点不需要额外授权。