

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

# 为用户池配置身份提供者
<a name="cognito-user-pools-identity-provider"></a>

使用用户池，您可以通过各种外部身份提供商（IdPs）实现登录。指南的这一部分说明了如何在 Amazon Cognito 控制台中使用用户池设置这些身份提供者。或者，您可以使用用户池 API 和 AWS SDK 以编程方式添加用户池身份提供商。有关更多信息，请参阅 [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html)。

支持的身份提供者选项包括 Facebook、Google 和 Amazon 等社交提供者，以及 OpenID Connect（OIDC）和 SAML 2.0 提供者。在开始之前，请为自己设置 IdP 的管理凭证。对于每种类型的提供者，您都需要注册应用程序，获取必要的凭证，然后在用户池中配置提供者的详细信息。然后，您的用户可以使用已连接身份提供者的现有账户注册和登录您的应用程序。

“**身份验证**” 下的 “**社交和外部提供商**” 菜单可添加和更新用户池 IdPs。有关更多信息，请参阅 [使用第三方身份提供者进行用户池登录](cognito-user-pools-identity-federation.md)。

**Topics**
+ [使用社交 IdP 设置用户登录](#cognito-user-pools-facebook-provider)
+ [使用 OIDC IdP 设置用户登录](#cognito-user-pools-oidc-providers)
+ [使用 SAML IdP 设置用户登录](#cognito-user-pools-saml-providers)

## 使用社交 IdP 设置用户登录
<a name="cognito-user-pools-facebook-provider"></a>

您可以使用联合身份验证，将 Amazon Cognito 用户池与社交身份提供者（如 Facebook、Google 和 Login with Amazon）集成起来。

要添加社交身份提供者，您首先要通过该身份提供者创建一个开发人员账户。在拥有开发人员账户后，您应向身份提供者注册您的应用程序。该身份提供者将为您的应用程序创建应用程序 ID 和应用程序密钥，然后您在您的 Amazon Cognito 用户池中配置这些值。
+ [Google Identity Platform](https://developers.google.com/identity/)
+ [Facebook for Developers](https://developers.facebook.com/docs/facebook-login)
+ [Login with Amazon](https://developer.amazon.com/login-with-amazon)
+ [通过 Apple 登录](https://developer.apple.com/sign-in-with-apple/)

**将用户登录与社交 IdP 集成**

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

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

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

1. 选择 **Add an identity provider**（添加身份提供者），或者选择已配置的身份提供者（例如 **Facebook**、**Google**、**Amazon** 或 **Apple**），找到 **Identity provider information**（身份提供者信息），然后选择 **Edit**（编辑）。有关添加社交身份提供者的更多信息，请参阅[将社交身份提供者与用户池配合使用](cognito-user-pools-social-idp.md)。

1. 根据您选择的 IdP，完成以下步骤之一，从而输入社交身份提供者的信息：  
**Facebook、Google 和 Login with Amazon**  
输入您创建客户端应用程序时收到的应用程序密钥。  
**Sign In with Apple**  
输入您向 Apple 提供的服务 ID，以及创建应用程序客户端时收到的团队 ID、密钥 ID 和私有密钥。

1. 对于 **Authorize scopes**（授权范围），输入要映射到用户池属性的社交身份提供者范围的名称。范围定义了您要通过应用程序访问的用户属性（如名称和电子邮件）。输入范围时，根据您选择的 IdP 使用以下准则：
   + **Facebook** – 以英文逗号分隔范围。例如：

     `public_profile, email`
   + **Google、Login with Amazon 和 Sign In with Apple** – 以空格分隔范围。例如：
     + **Google:** `profile email openid`
     + **Login with Amazon:** `profile postal_code`
     + **通过 Apple 登录：**`name email`
**注意**  
对于 Sign in with Apple（控制台），请使用复选框以选择范围。

1. 选择**保存更改**。

1. 在**应用程序客户端**菜单中，从列表中选择一个应用程序客户端，然后选择**编辑**。将新的社交身份提供商添加到 **Identity providers**（身份提供商）下的应用程序客户端。

1. 选择**保存更改**。

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

## 使用 OIDC IdP 设置用户登录
<a name="cognito-user-pools-oidc-providers"></a>

您可以将用户登录与 OpenID Connect (OIDC) 身份提供者 (IdP) 集成，例如 Salesforce 或 Ping Identity。

**向用户池添加 OIDC 提供者**

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

1. 从导航菜单中选择 **User Pools**（用户池）。

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

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

1. 选择 **OpenID Connect** 身份提供者。

1. 在 **Provider name**（提供商名称）中输入一个唯一名称。

1. 将您从提供商那里收到的客户端 ID 输入到 **Client ID**（客户端 ID）。

1. 将您从提供商那里收到的客户端密钥输入到 **Client secret**（客户端密钥）。

1. 为该提供商输入 **Authorized scopes**（授权范围）。范围定义了应用程序将向您的提供商请求的用户属性组（例如 `name` 和 `email`）。按照 [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-3.3) 规范，作用域必须用空格分隔。

   您的用户必须同意向您的应用程序提供这些属性。

1. 请选择一个 **Attribute request method**（属性请求方法），以便为 Amazon Cognito 提供 HTTP 方法（GET 或 POST），Amazon Cognito 使用该方法从提供商运营的 **userInfo** 端点中获取用户的详细信息。

1. 请选择 **Setup method**（设置方法）并通过 **Auto fill through issuer URL**（自动填充发布者 URL）或 **Manual input**（手动输入）检索 OpenID Connect 端点。如果您的提供商拥有公共`.well-known/openid-configuration`终端节点，Amazon Cognito 可以在其中检索、、和`jwks_uri`终端节点 `authorization` `token``userInfo`，请 URLs 使用**自动填写发行者 URL**。

1. 输入 URLs 来自您的 IdP 的发卡机构 URL 或`authorization``token``userInfo`、、和`jwks_uri`终端节点。
**注意**  
您只能使用端口号 443 和 80 进行发现、自动填充和手动输入。 URLs如果您的 OIDC 提供商使用任何非标准 TCP 端口，则用户登录失败。  
发布者 URL 必须以 `https://` 开头，而且不得以 `/` 字符结尾。例如，Salesforce 使用以下 URL：  
`https://login.salesforce.com`   
与您的发卡机构 URL 关联的`openid-configuration`文档必须 URLs 为以下值提供 HTTPS：`authorization_endpoint``token_endpoint`、`userinfo_endpoint`、和`jwks_uri`。同样，当您选择 “**手动输入**” 时，只能输入 HTTPS URLs。

1. 默认情况下，**sub** OIDC 声明将映射到用户池 **Username**（用户名）属性中。您可以将其他 OIDC [声明](https://openid.net/specs/openid-connect-basic-1_0.html#StandardClaims)映射到用户池属性。输入 OIDC 声明，然后从下拉列表中选择对应的用户池属性。例如，声明 **email** 通常会映射到用户池属性 **Email**（电子邮件）。

1. 请将身份提供者的其它属性映射到您的用户池。有关更多信息，请参阅[指定适用于用户池的身份提供程序属性映射](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-specifying-attribute-mapping.html)。

1. 选择**创建**。

1. 在**应用程序客户端**菜单中，从列表中选择一个应用程序客户端。要将新 SAML 身份提供者添加到应用程序客户端，请导航到**登录页面**选项卡，然后选择**托管登录页面配置**上的**编辑**。

1. 选择**保存更改**。

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

## 使用 SAML IdP 设置用户登录
<a name="cognito-user-pools-saml-providers"></a>

您可以使用 Amazon Cognito 用户池的联合身份验证与 SAML 身份提供者（IdP）集成。您可以通过上传文件或输入元数据文档端点 URL 来提供元数据文档。有关获取第三方 SAML 的元数据文档的信息 IdPs，请参阅[配置第三方 SAML 身份提供者](cognito-user-pools-integrating-3rd-party-saml-providers.md)。

**在您的用户池中配置 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. 选择**社交和外部提供商**菜单，然后选择**添加身份提供者**。

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

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

1. 如果您希望 Amazon Cognito 在用户注销时向您的提供商发送已签名的注销请求，请选择 **Add sign-out flow**（添加注销流程）。配置 SAML 2.0 身份提供者，向您配置托管登录时 Amazon Cognito 创建的 `https://mydomain.auth.us-east-1.amazoncognito.com/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，而不是上载文件。如果您使用 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. 选择 **Create**（创建）。

**注意**  
如果您在使用 HTTPS 元数据端点 URL 创建 SAML IdP 时看见 `InvalidParameterException`，请确保元数据端点已正确设置 SSL，并且存在与之关联的有效 SSL 证书。此类异常的一个例子是 “从中检索元数据时出错*<metadata endpoint>*”。

**设置 SAML IdP 以添加签名证书**
+ 要获取包含 IdP 用于验证已签名注销请求的公钥的证书，请执行以下操作：

  1. 转到用户池的**社交和外部提供商**菜单。

  1. 选择 SAML 提供商。

  1. 选择**查看签名证书**。

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