

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

# 通过单点注销来注销 SAML 用户
<a name="cognito-user-pools-saml-idp-sign-out"></a>

Amazon Cognito 支持 SAML 2.0 [单点注销](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0-cd-02.html#5.3.Single%20Logout%20Profile|outline) (SLO)。 借助 SLO，当用户从您的用户池中注销时，您的应用程序可以从其 SAML 身份提供商 (IdPs) 中注销他们。这样，当用户想要再次登录应用程序时，他们必须使用其 SAML IdP 进行身份验证。如果不这样做，他们可能会因为在浏览器中有 IdP 或用户池 Cookie，所以无需提供凭证即可进入您的应用程序。

当您将 SAML IdP 配置为支持**注销流程**时，Amazon Cognito 会通过已签名的 SAML 注销请求将您的用户重定向到您的 IdP。Amazon Cognito 根据您的 IdP 元数据中的 `SingleLogoutService` URL 确定重定向位置。Amazon Cognito 使用您的用户池签名证书签署注销请求。

![\[Amazon Cognito SAML 注销的身份验证流程图。用户请求注销，然后 Amazon Cognito 通过 SAML 注销请求将他们重定向到其提供者。\]](http://docs.amazonaws.cn/cognito/latest/developerguide/images/scenario-authentication-saml-sign-out.png)


当您将具有 SAML 会话的用户定向到您的用户池 `/logout` 端点时，Amazon Cognito 会将您的 SAML 用户通过以下请求重定向到 IdP 元数据中指定的 SLO 端点。

```
https://[SingleLogoutService endpoint]?
SAMLRequest=[encoded SAML request]&
RelayState=[RelayState]&
SigAlg=http://www.w3.org/2001/04/xmldsig-more#rsa-sha256&
Signature=[User pool RSA signature]
```

然后，您的用户使用来自其 IdP 的 `LogoutResponse` 返回到您的 `saml2/logout` 端点。您的 IdP 必须在 `HTTP POST` 请求中发送 `LogoutResponse`。然后，Amazon Cognito 会根据他们最初的注销请求将他们重定向到重定向目的地。

您的 SAML 提供者可能会发送包含多个 `AuthnStatement` 的 `LogoutResponse`。此类响应中第一个 `AuthnStatement` 中的 `sessionIndex` 必须与最初对用户进行身份验证的 SAML 响应中的 `sessionIndex` 匹配。如果 `sessionIndex` 在任何其他 `AuthnStatement` 中，则 Amazon Cognito 将无法识别会话，且您的用户不会注销。

------
#### [ Amazon Web Services 管理控制台 ]

**配置 SAML 注销**

1. 创建[用户池](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)、[应用程序客户端](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-user-pools-configuring-app-integration.html)和 SAML IdP。

1. 创建或编辑 SAML 身份提供者时，在**身份提供者信息**下，选中名称为**添加注销流程**的复选框。

1. 从用户池的**社交和外部提供商**菜单中，选择您的 IdP 并找到**签名证书**。

1. 选择**以 .crt 格式下载证书**。

1. 将您的 SAML 提供者配置为支持 SAML 单点注销和请求签名，然后上传用户池签名证书。您的 IdP 必须重定向到用户池域中的 `/saml2/logout`。

------
#### [ API/CLI ]

**配置 SAML 注销**

使用[CreateIdentityProvider](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html)或 [UpdateIdentityProvider](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html)API 请求的`IDPSignout`参数配置单次注销。以下是支持 SAML 单点注销的 IdP 的示例 `ProviderDetails`。

```
"ProviderDetails": { 
      "MetadataURL" : "https://myidp.example.com/saml/metadata",
      "IDPSignout" : "true",,
      "RequestSigningAlgorithm" : "rsa-sha256",
      "EncryptedResponses" : "true",
      "IDPInit" : "true"
}
```

------