为用户池配置身份提供商 - Amazon Cognito

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

为用户池配置身份提供商

使用用户池,您可以通过各种外部身份提供商(IdPs)实现登录。本指南的这一部分说明了如何在 Amazon Cognito 控制台中使用您的用户池设置这些身份提供商。或者,您可以使用用户池API和 AWS SDK以编程方式添加用户池身份提供商。有关更多信息,请参阅CreateIdentityProvider

支持的身份提供商选项包括Facebook、谷歌和亚马逊等社交提供商,以及 OpenID Connect (OIDC) 和 SAML 2.0 提供商。在开始之前,请为自己设置 IdP 的管理证书。对于每种类型的提供商,你都需要注册应用程序,获取必要的证书,然后在用户池中配置提供商的详细信息。然后,您的用户可以使用关联的身份提供商提供的现有帐户注册并登录您的应用程序。

联邦身份提供商登录下的登录体验选项卡可添加和更新用户池。 IdPs有关更多信息,请参阅 通过第三方添加用户池登录

使用社交 IdP 设置用户登录

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

要添加社交身份提供商,您首先要通过该身份提供商创建一个开发人员账户。在拥有开发人员账户后,您应向身份提供商注册您的应用程序。该身份提供商将为您的应用程序创建应用程序 ID 和应用程序密钥,然后您在您的 Amazon Cognito 用户池中配置这些值。

将用户登录与社交 IdP 集成
  1. 登录 Amazon Cognito 控制台。如果出现提示,请输入您的 AWS 凭据。

  2. 在导航窗格中,选择 User Pools(用户池),然后选择要编辑的用户池。

  3. 选择 Sign-in experience(登录体验)选项卡并找到 Federated sign-in(联合登录)。

  4. 选择 Add an identity provider(添加身份提供商),或者选择已配置的身份提供商(例如 FacebookGoogleAmazonApple),找到 Identity provider information(身份提供商信息),然后选择 Edit(编辑)。有关添加社交身份提供商的更多信息,请参阅在用户池中使用社交身份提供商

  5. 根据您选择的 IdP,完成以下步骤之一,从而输入社交身份提供商的信息:

    Facebook、Google 和 Login with Amazon

    输入您创建客户端应用程序时收到的应用程序密钥。

    Sign In with Apple

    输入您向 Apple 提供的服务 ID,以及创建应用程序客户端时收到的团队 ID、密钥 ID 和私有密钥。

  6. 对于 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

      • Sign In with Apple: name email

        注意

        对于 Sign in with Apple(控制台),请使用复选框以选择范围。

  7. 选择 Save changes(保存更改)。

  8. App client integration(应用程序客户端集成)选项卡上的列表中选择一个 App clients(应用程序客户端),然后选择 Edit hosted UI settings(编辑托管 UI 设置)。将新的社交身份提供商添加到 Identity providers(身份提供商)下的应用程序客户端。

  9. 选择 Save changes(保存更改)。

有关社交的更多信息 IdPs,请参阅在用户池中使用社交身份提供商

设置用户使用 IdP OIDC 登录

你可以将用户登录与 OpenID Conn OIDC ect () 身份提供商 (IdP) 集成,例如 Salesforce 或 Ping Identity。

向用户池中添加OIDC提供商
  1. 转到 Amazon Cognito 控制台。如果出现提示,请输入您的 AWS 凭据。

  2. 从导航菜单中选择 User Pools(用户池)。

  3. 从列表中选择一个现有用户池,或创建一个用户池

  4. 选择 Sign-in experience(登录体验)选项卡。找到 Federated sign-in(联合登录),然后选择 Add an identity provider(添加身份提供商)。

  5. 选择 OpenID Connect 身份提供商。

  6. Provider name(提供商名称)中输入一个唯一名称。

  7. 将您从提供商那里收到的客户端 ID 输入到 Client ID(客户端 ID)。

  8. 将您从提供商那里收到的客户端密钥输入到 Client secret(客户端密钥)。

  9. 为该提供商输入 Authorized scopes(授权范围)。范围定义了应用程序将向您的提供商请求的用户属性组(例如 nameemail)。按照 OAuth2.0 规范,作用域必须用空格分隔。

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

  10. 选择一种属性请求方法,为 Amazon Cognito 提供 Amazon Cognito 用于从userInfo您的提供商运营的终端节点获取用户详细信息HTTP的方法(GET或之一POST)。

  11. 选择一种设置方法通过自动填写签发者URL或手动输入来检索 OpenID Connect 端点。URL如果您的提供商拥有公共.well-known/openid-configuration终端节点,Amazon Cognito 可以在其中检索、、和jwks_uri终端节点 authorization tokenuserInfo,则使用自动填充发卡机构。URLs

  12. 输入您的 IdP 的颁发者URL或authorizationtokenuserInfo、、和jwks_uri终端节点URLs。

    注意

    您只能使用端口号 443 和 80 进行发现、自动填充和手动输入。URLs如果您的OIDC提供商使用任何非标准TCP端口,则用户登录将失败。

    发行人URL必须以字符开头https://,不得以/字符结尾。例如,Salesforce 使用以下URL方法:

    https://login.salesforce.com

    与您的签发者关联HTTPSURLs的openid-configuration文档URL必须提供以下值:authorization_endpointtoken_endpointuserinfo_endpoint、和jwks_uri。同样,当您选择 “手动输入” 时,只能输入HTTPSURLs。

  13. 默认情况下OIDC,claim sub 映射到用户池属性 “用户名”。您可以将其他OIDC声明映射到用户池属性。输入OIDC声明,然后从下拉列表中选择相应的用户池属性。例如,声明 email 通常会映射到用户池属性 Email(电子邮件)。

  14. 请将身份提供商的其它属性映射到您的用户池。有关更多信息,请参阅指定适用于用户池的身份提供程序属性映射

  15. 选择 Create(创建)。

  16. App client integration(应用程序客户端集成)选项卡上的列表中选择 App clients(应用程序客户端)的其中一个,然后选择 Edit hosted UI settings(编辑托管 UI 设置)。将新的OIDC身份提供者添加到应用程序客户端的 “身份提供商” 下。

  17. 选择 Save changes(保存更改)

有关的更多信息 OIDC IdPs,请参阅在用户池中使用OIDC身份提供商

设置用户使用 IdP 登录 SAML

您可以使用 Amazon Cognito 用户池的联合身份验证与SAML身份提供商 (IdP) 集成。您可以通过上传文件或输入元数据文档端点来提供元数据文档URL。有关获取第三方元数据文档的信息 SAML IdPs,请参阅配置您的第三方SAML身份提供商

在您的用户池中配置 SAML 2.0 身份提供商
  1. 转到 Amazon Cognito 控制台。如果出现提示,请输入您的 AWS 凭据。

  2. 选择用户池

  3. 从列表中选择一个现有用户池,或创建一个用户池

  4. 选择 Sign-in experience(登录体验)选项卡。找到 Federated sign-in(联合登录),然后选择 Add an identity provider(添加身份提供商)。

  5. 选择SAML身份提供商。

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

  7. 如果您希望 Amazon Cognito 在用户注销时向您的提供商发送已签名的注销请求,请选择 Add sign-out flow(添加注销流程)。配置您的 SAML 2.0 身份提供商,使其向 Amazon Cognito 在您配置托管用户界面时创建的https://mydomain.us-east-1.amazoncognito.com/saml2/logout终端节点发送退出响应。saml2/logout端点使用POST绑定。

    注意

    如果您选择此选项,并且您的SAML身份提供商需要签名的注销请求,则还必须使用您的 IdP 配置 Amazon Cognito 提供的签名证书。SAML

    SAMLIdP 将处理已签名的注销请求并将您的用户从 Amazon Cognito 会话中注销。

  8. 选择 Metadata document source(元数据文档源)。如果您的身份提供者在公共场合提供SAML元数据URL,则可以选择元数据文档URL并输入该公开文档URL。否则,请选择 Upload metadata document(上载元数据文档),然后选择您之前从提供商下载的元数据文件。

    注意

    如果您的提供商有公共终端节点,我们建议您输入元数据文档URL,而不是上传文件。如果您使用URL,Amazon Cognito 会自动刷新元数据。通常,元数据刷新操作每 6 小时执行一次或在元数据过期前执行(以时间较早者为准)。

  9. 在您的SAML提供商和应用程序之间映射属性,以将SAML提供商属性映射到用户池中的用户个人资料。在属性映射中包含用户池必需属性。

    例如,当您选择 “用户池属性”email,输入身份提供商提供的SAML断言中显示的SAML属性名称。您的身份提供商可能会提供示例SAML断言以供参考。一些身份提供者使用简单的名称,例如email,而另一些身份提供者则使用类似于URL以下内容的格式化属性名称:

    http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
  10. 选择创建

注意

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

设置 SAML IdP 以添加签名证书
  • 要获取包含公钥的证书,IdP 用以验证已签名的注销请求,请在联合控制台页面的 “身份提供者” 下的SAML对话框中,选择 “活动SAML提供者” 下的 “显示签名证书”。

有关更多信息,SAML IdPs 请参阅在用户池中使用SAML身份提供商