

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

# 添加 SAML 2.0 身份提供者
<a name="tutorial-create-user-pool-saml-idp"></a>

您的应用程序用户可以通过 SAML 2.0 身份提供者（IdP）进行登录。 IdPs 当您的客户是组织的内部客户或关联企业时，您可以选择 SAML 2.0 IdPs 而不是社交。如果社交 IdP 允许所有用户注册一个账户，那么 SAML IdP 更有可能与您的组织控制的用户目录配对。无论您的用户是直接登录还是通过第三方登录，所有用户都在用户池中有一个配置文件。如果您不想添加通过 SAML 身份提供者进行的登录，请跳过此步骤。

有关更多信息，请参阅 [将 SAML 身份提供者与用户池配合使用](cognito-user-pools-saml-idp.md)。

您必须更新 SAML 身份提供者并配置用户池。有关如何将您的用户池添加为 SAML 2.0 身份提供者的依赖方或应用程序的信息，请参阅 SAML 身份提供者的文档。

还必须向 SAML 身份提供者提供断言使用者服务（ACS）端点。在用户群体域中为您的 SAML 身份提供者中的 SAML 2.0 POST 绑定配置以下端点。有关用户池域的更多信息，请参阅 [配置用户池域](cognito-user-pools-assign-domain.md)。

```
https://Your user pool domain/saml2/idpresponse
With an Amazon Cognito domain:
https://<yourDomainPrefix>.auth.<region>.amazoncognito.com/saml2/idpresponse
With a custom domain:
https://Your custom domain/saml2/idpresponse
```

您可以在 [Amazon Cognito 控制台](https://console.aws.amazon.com/cognito/home)的**域**菜单中找到用户池的域前缀和区域值。

对于一些 SAML 身份提供者，您还需要提供服务提供者（SP）`urn`，也称为受众 URI 或 SP 实体 ID，采用以下格式：

```
urn:amazon:cognito:sp:<yourUserPoolID>
```

您可以在 [Amazon Cognito 控制台](https://console.aws.amazon.com/cognito/home)的用户池**概述**控制面板中找到用户池 ID。

您还应配置 SAML 身份提供者，以便为您的用户池中需要的任何属性提供属性值。通常情况下，`email` 是用户池的必需属性。在这种情况下，SAML 身份提供者应在 SAML 断言中提供一个 `email` 值（声明）。

Amazon Cognito 用户池支持 SAML 2.0 与 POST 绑定端点联合。这使您的应用程序不必检索或分析 SAML 断言响应，因为用户池直接通过用户代理从身份提供者接收 SAML 响应。

**在您的用户池中配置 SAML 2.0 身份提供商**

1. 转到 [Amazon Cognito 控制台](https://console.aws.amazon.com/cognito/home)。如果出现提示，请输入您的 AWS 凭据。

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

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

1. 选择**社交和外部提供商**菜单。找到 **Federated sign-in**（联合登录），然后选择 **Add an identity provider**（添加身份提供者）。

1. 选择 **SAML** 社交身份提供者。

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

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

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

1. 选择 **Map attributes between your SAML provider and your app**（在 SAML 提供商和应用程序之间映射属性）将 SAML 提供程序属性映射到用户池中的用户配置文件。在属性映射中包含用户池必需属性。

   例如，当您选择 **User pool attribute**（用户池属性）`email` 时，按照您的身份提供者提供的 SAML 断言中显示的内容，输入 SAML 属性名称。您的身份提供商可能会提供示例 SAML 断言以供参考。一些身份提供者使用简单名称（如 `email`），另一些则使用以下示例 URL 格式的属性名称：

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

1. 选择**创建**。