

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

# 托管登录的注销端点：`/logout`
<a name="logout-endpoint"></a>

`/logout` 端点是重定向端点。该端点使用户注销并重定向到您的应用程序客户端的授权注销 URL，或重定向到 `/login` 端点。`/logout` 端点的 GET 请求中的可用参数是针对 Amazon Cognito 托管登录使用案例量身定制的。

注销端点是一个前端 Web 应用程序，用于与客户进行交互式用户会话。您的应用程序必须在用户的浏览器中调用此端点和其他托管登录端点。

要将用户重定向到托管登录以再次登录，请在请求中添加 `redirect_uri` 参数。带 `redirect_uri` 参数的 `logout` 请求还必须包含对[登录端点](login-endpoint.md)的后续请求的参数，例如 `client_id`、`response_type` 和 `scope`。

要将用户重定向到您选择的页面，请在您的应用程序客户端**中 URLs添加允许**注销。在用户的对 `logout` 端点的请求中，添加 `logout_uri` 和 `client_id` 参数。如果的值`logout_uri`是您的应用程序客户端**允许的注销 URLs**之一，则 Amazon Cognito 会将用户重定向到该网址。

使用 SAML 2.0 的单点注销 (SLO)，Amazon IdPs Cognito 首先将您的用户重定向到您在 IdP 配置中定义的 SLO 终端节点。在您的 IdP 将您的用户重定向回到 `saml2/logout` 之后，Amazon Cognito 会根据您的请求，再向 `redirect_uri` 或 `logout_uri` 发送一次重定向响应。有关更多信息，请参阅 [通过单点注销来注销 SAML 用户](cognito-user-pools-saml-idp-sign-out.md)。

注销端点不会让用户退出 OIDC 或社交身份提供商 ()。IdPs要让用户从与外部 IdP 进行的会话中注销，请将他们引导到该提供者的注销页面。

## GET /logout
<a name="get-logout"></a>

`/logout` 端点只支持 `HTTPS GET`。用户池客户端通常通过浏览器发出此请求。浏览器在 Android 中通常是自定义 Chrome 标签页，在 iOS 中是 Safari 视图控件。

### 请求参数
<a name="get-logout-request-parameters"></a>

*client\$1id*  
您的应用程序的应用程序客户端 ID。要获取应用程序客户端 ID，您必须在用户池中注册该应用程序。有关更多信息，请参阅 [特定于应用程序的应用程序客户端设置](user-pool-settings-client-apps.md)。  
必需。

*logout\$1uri*  
使用 *logout\$1uri* 参数将用户重新导向到自定义注销页面。将其值设置为应用程序客户端**注销 URL**，您要在用户退出后将其重新导向到此 URL。仅将 *logout\$1uri* 与 *client\$1id* 参数一起使用。有关更多信息，请参阅 [特定于应用程序的应用程序客户端设置](user-pool-settings-client-apps.md)。  
您也可以使用 *logout\$1uri* 参数将用户重定向到另一个应用程序客户端的登录页面。将其他应用程序客户端的登录页面设置为您的应用程序客户端中的**允许的回调 URL**。在对 `/logout` 端点的请求中，将 *logout\$1uri* 参数的值设置为 URL 编码的登录页面。  
Amazon Cognito 要求在您对 `/logout` 端点的请求中使用 *logout\$1uri* 或 *redirect\$1uri* 参数。*logout\$1uri* 参数会将您的用户重定向到另一个网站。如果您对 `/logout` 端点的请求中同时包含 *logout\$1uri* 和 *redirect\$1uri* 参数，Amazon Cognito 将以独占方式使用 *logout\$1uri* 参数，而覆盖 *redirect\$1uri* 参数。

*`nonce`*  
（可选）您可以添加到请求中的随机值。您提供的 nonce 值包含在 Amazon Cognito 发出的 ID 令牌中。为了防范重播攻击，您的应用程序可以检查 ID 令牌中的 `nonce` 声明并将其与您生成的声明进行比较。有关 `nonce` 声明的更多信息，请参阅《OpenID Connect 标准》**中的 [ID token validation](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation)（ID 令牌验证）。

**redirect\$1uri**  
使用 *redirect\$1uri* 将用户重新导向到登录页以进行身份验证。将其值设置为应用程序客户端**允许的回调 URL**，您要在用户再次登录后将其重新导向到此 URL。添加您要传递给 `/login` 端点的 *client\$1id*、*scope*、*state* 和 *response\$1type* 参数。  
Amazon Cognito 要求在您对 `/logout` 端点的请求中使用 *logout\$1uri* 或 *redirect\$1uri* 参数。要将用户重定向到 `/login` 端点以重新验证身份并将令牌传递给您的应用程序，请添加 *redirect\$1uri* 参数。如果您向 `/logout` 端点发出的请求中同时包含 *logout\$1uri* 和 *redirect\$1uri* 参数，则 Amazon Cognito 会覆盖 *redirect\$1uri* 参数，并以独占方式处理 *logout\$1uri* 参数。

*response\$1type*  
您希望在用户登录后从 Amazon Cognito 收到的 OAuth 2.0 响应。 `code`和`token`是 r *esponse\$1t* ype 参数的有效值。  
在您使用 *redirect\$1uri* 参数时是必需的。

*状态*  
当应用程序向请求添加 *state* 参数时，如果 `/oauth2/logout` 端点重新导向您的用户，则 Amazon Cognito 将此参数的值返回给您的应用程序。  
将此值添加到您的请求中以防止 [CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery) 攻击。  
不能将 `state` 参数的值设置为 URL 编码的 JSON 字符串。要在 `state` 参数中传递与此格式匹配的字符串，请将该字符串编码为 base64，然后在应用程序中对其进行解码。  
如果您使用 *redirect\$1uri* 参数，强烈推荐使用此参数。

*范围*  
你想在使用 redi *re* ct\$1uri 参数注销后向亚马逊 Cognito 请求的 OAuth 2.0 范围。Amazon Cognito 使用您对 `/logout` 端点的请求中的 *scope* 参数将您的用户重定向到 `/login` 端点。  
在您使用 *redirect\$1uri* 参数时是可选的。如果不包括 *scope* 参数，Amazon Cognito 会使用 *scope* 参数将您的用户重定向到 `/login` 端点。当 Amazon Cognito 重定向用户并自动填充 `scope` 时，该参数包括应用程序客户端的所有授权范围。

### 示例请求
<a name="get-logout-request-sample"></a>

**示例：注销并将用户重新导向到客户端**

当请求包含 `logout_uri` 和 `client_id` 时，Amazon Cognito 会将用户会话重定向到 `logout_uri` 值中的 URL，忽略所有其他请求参数。这个 URL 必须是应用程序客户端的授权注销 URL。

以下是注销并重定向到 `https://www.example.com/welcome` 的请求示例。

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/logout?
  client_id=1example23456789&
  logout_uri=https%3A%2F%2Fwww.example.com%2Fwelcome
```

**示例：注销并提示用户以其他用户身份登录**

如果请求忽略 `logout_uri`，但以其他方式提供了参数，可以构成对授权端点发出的、格式正确的请求，Amazon Cognito 会将用户重定向到托管登录的登录。注销端点会将原始请求中的参数附加到重定向目的地。

您添加到注销请求中的其他参数必须位于[请求参数](#get-logout-request-parameters)处的列表中。例如，注销端点不支持使用 `identity_provider` 或 `idp_identifier` 参数的自动 IdP 重定向。向注销终端节点发出的请求`redirect_uri`中的参数不是注销 URL，而是您要传递到授权端点的 post-sign-in URL。

以下是将用户注销，重定向到登录页面，然后在登录后向 `https://www.example.com` 提供授权代码的请求示例。

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/logout?
  response_type=code&
  client_id=1example23456789&
  redirect_uri=https%3A%2F%2Fwww.example.com&
  state=example-state-value&
  nonce=example-nonce-value&
  scope=openid+profile+aws.cognito.signin.user.admin
```