

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

# 在用户池中添加和力 SAML 身份提供者
添加 SAML 提供商

将身份提供者配置为与 Amazon Cognito 配合使用后，您可以将其添加到用户池和应用程序客户端。以下步骤演示了如何在 Amazon Cognito 用户池中创建、修改和删除 SAML 提供者。

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

您可以使用 Amazon Web Services 管理控制台 来创建和删除 SAML 身份提供商 (IdPs)。

在创建 SAML IdP 之前，您必须具有从第三方 IdP 处获得的 SAML 元数据文档。有关如何获取或生成所需的 SAML 元数据文档的说明，请参阅[配置第三方 SAML 身份提供者](cognito-user-pools-integrating-3rd-party-saml-providers.md)。

**在您的用户池中配置 SAML 2.0 IdP**

1. 转到 [Amazon Cognito 控制台](https://console.amazonaws.cn/cognito/home)。如果出现提示，请输入 Amazon 凭证。

1. 选择**用户池**。

1. 从列表中选择一个现有用户池，或[创建一个用户池](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)。

1. 选择**社交和外部提供商**菜单，然后选择**添加身份提供者**。

1. 选择一个 **SAML** IdP。

1. 输入**提供商名称**。您可以在 `identity_provider` 请求参数中将这个友好名称传递给 [对端点授权](authorization-endpoint.md)。

1. 输入以逗号分隔的 **Identifiers**（标识符）。标识符将告知 Amazon Cognito 应该检查用户登录时输入的电子邮件地址，然后将它们引导到与其域名对应的提供商。

1. 如果您希望 Amazon Cognito 在用户注销时向您的提供商发送已签名的注销请求，请选择 **Add sign-out flow**（添加注销流程）。您必须配置 SAML 2.0 IdP 以向配置托管登录时创建的 `https://mydomain.auth.us-east-1.amazoncognito.com/saml2/logout` 端点发送注销响应。此 `saml2/logout` 端点使用 POST 绑定。
**注意**  
如果选择此选项，且您的 SAML IdP 需要已签署的注销请求，则还必须为您的 SAML IdP 提供来自用户池的签名证书。  
SAML IdP 将处理已签名的注销请求并从 Amazon Cognito 会话中注销您的用户。

1. 选择 **IdP 发起的 SAML 登录**配置。作为一项安全最佳实践，请选择**仅接受 SP 发起的 SAML 断言**。如果您已准备好环境，以便安全地接受未经请求的 SAML 登录会话，请选择**接受 SP 发起和 IdP 发起的 SAML 断言**。有关更多信息，请参阅 [SAML 会话在 Amazon Cognito 用户池中启动](cognito-user-pools-SAML-session-initiation.md)。

1. 选择 **Metadata document source**（元数据文档源）。如果您的 IdP 在公有 URL 上提供 SAML 元数据，则可以选择 **Metadata document URL**（元数据文档 URL），然后输入该公有 URL。否则，请选择 **Upload metadata document**（上载元数据文档），然后选择您之前从提供商下载的元数据文件。
**注意**  
如果您的提供者具有公有端点，建议您输入元数据文档 URL，而不是上传文件。Amazon Cognito 会自动从元数据 URL 刷新元数据。通常，元数据刷新操作每 6 小时执行一次或在元数据过期前执行（以时间较早者为准）。

1. **在 SAML 提供者和用户池之间映射属性**选项将 SAML 提供者属性映射到用户池中的用户配置文件。在属性映射中包含用户池必需属性。

   例如，当您选择 **User pool attribute**（用户池属性）`email` 时，按照您的 IdP 提供的 SAML 断言中显示的内容，输入 SAML 属性名称。如果 IdP 提供了示例 SAML 断言，您可以使用这些示例断言帮助您查找名称。有些 IdPs 使用简单的名称，例如`email`，而另一些则使用如下所示的名称。

   ```
   http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
   ```

1. 选择**创建**。

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

使用以下命令可创建和管理 SAML 身份提供者 (IdP)。

**创建 IdP 并上传元数据文档**
+ Amazon CLI: `aws cognito-idp create-identity-provider`

  带元数据文件的示例：`aws cognito-idp create-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-type SAML --provider-details file:///details.json --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`

  其中 `details.json` 包含：

  ```
  "ProviderDetails": { 
        "MetadataFile": "<SAML metadata XML>",
        "IDPSignout" : "true",
        "RequestSigningAlgorithm" : "rsa-sha256",
        "EncryptedResponses" : "true",
        "IDPInit" : "true"
  }
  ```
**注意**  
如果*<SAML metadata XML>*包含该字符的任何实例`"`，则必须添加`\`为转义字符：`\"`。

  带元数据 URL 的示例：`aws cognito-idp create-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-type SAML --provider-details MetadataURL=https://myidp.example.com/sso/saml/metadata --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`
+ Amazon API: [CreateIdentityProvider](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html)

**为 IdP 上传新的元数据文档**
+ Amazon CLI: `aws cognito-idp update-identity-provider`

  带元数据文件的示例：`aws cognito-idp update-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-details file:///details.json --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`

  其中 `details.json` 包含：

  ```
  "ProviderDetails": { 
        "MetadataFile": "<SAML metadata XML>",
        "IDPSignout" : "true",
        "RequestSigningAlgorithm" : "rsa-sha256",
        "EncryptedResponses" : "true",
        "IDPInit" : "true"
  }
  ```
**注意**  
如果*<SAML metadata XML>*包含该字符的任何实例`"`，则必须添加`\`为转义字符：`\"`。

  带元数据 URL 的示例：`aws cognito-idp update-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-details MetadataURL=https://myidp.example.com/sso/saml/metadata --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`
+ Amazon API: [UpdateIdentityProvider](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html)

**获取有关特定 IdP 的信息**
+ Amazon CLI: `aws cognito-idp describe-identity-provider`

  `aws cognito-idp describe-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1`
+ Amazon API: [DescribeIdentityProvider](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_DescribeIdentityProvider.html)

**列出所有相关信息 IdPs**
+ Amazon CLI: `aws cognito-idp list-identity-providers`

  示例：`aws cognito-idp list-identity-providers --user-pool-id us-east-1_EXAMPLE --max-results 3`
+ Amazon API: [ListIdentityProviders](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_ListIdentityProviders.html)

**删除 IdP**
+ Amazon CLI: `aws cognito-idp delete-identity-provider`

  `aws cognito-idp delete-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1`
+ Amazon API: [DeleteIdentityProvider](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_DeleteIdentityProvider.html)

------

**设置 SAML IdP 以添加用户池作为信赖方**
+ 用户池服务提供商 URN 为：`urn:amazon:cognito:sp:us-east-1_EXAMPLE`。Amazon Cognito 要求受众限制值与 SAML 响应中的这个 URN 相匹配。将您的 IdP 配置为使用以下 POST 绑定端点 IdP-to-SP作为响应消息。

  ```
  https://mydomain.auth.us-east-1.amazoncognito.com/saml2/idpresponse
  ```
+ 您的 SAML IdP 必须在 SAML 断言中为用户池填入 `NameID` 和任何必需属性。`NameID` 用于在用户池中唯一地标识您的 SAML 联合用户。您的 IdP 必须以一致、区分大小写的格式传递每个用户的 SAML 名称 ID。用户名 ID 值发生任何变化都会创建一个新的用户配置文件。

**向您的 SAML 2.0 IDP 提供签名证书**
+ 要从 Amazon Cognito 下载公钥的副本，让您的 IdP 可使用该副本来验证 SAML 注销请求，请选择用户池的**社交和外部提供商**菜单，选择您的 IdP，然后在**查看签名证书**下面，选择**以 .crt 格式下载证书**。

您可以使用 Amazon Cognito 控制台删除在用户池中设置的任何 SAML 提供商。

**删除 SAML 提供者**

1. 登录 [Amazon Cognito 控制台](https://console.amazonaws.cn/cognito/home)。

1. 在导航窗格中，选择 **User Pools**（用户池），然后选择要编辑的用户池。

1. 选择**社交和外部提供商**菜单。

1. 选择要删除的 SAML IdPs 旁边的单选按钮。

1. 当系统提示您 **Delete identity provider**（删除身份提供者）时，请输入 SAML 提供商的名称以确认删除，然后选择 **Delete**（删除）。