在用户池中添加和管理 SAML 身份提供商 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在用户池中添加和管理 SAML 身份提供商

以下过程演示如何在 Amazon Cognito 用户池中创建、修改和删除 SAML 提供商。

Amazon Web Services Management Console

您可以使用 Amazon Web Services Management Console 来创建和删除 SAML 身份提供商 (IdPs)。

在创建 SAML IdP 之前,您必须拥有从第三方 IdP 那里获得的 SAML 元数据文档。有关如何获取或生成所需的 SAML 元数据文档的说明,请参阅配置您的第三方 SAML 身份提供商

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

  2. 选择用户池

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

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

  5. 选择一个 SAML IdP。

  6. 输入提供商名称。您可以在identity_provider请求参数中将此友好名称传递给对端点授权

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

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

    注意

    如果选择了此选项,并且您的 SAML IdP 需要签名的注销请求,则您还必须向 SAML IdP 提供用户池中的签名证书。

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

  9. 选择您的 IDP 启动的 SAML 登录配置。作为安全最佳实践,请选择 “仅接受 SP 发起的 SAML 断言”。如果您已准备好安全地接受未经请求的 SAML 登录会话,请选择接受 SP 发起和 IDP 发起的 SAML 断言。有关更多信息,请参阅SAML 会话在 Amazon Cognito 用户池中启动

  10. 选择 Metadata document source(元数据文档源)。如果您的 IdP 在公有 URL 上提供 SAML 元数据,则可以选择 Metadata document URL(元数据文档 URL),然后输入该公有 URL。否则,请选择 Upload metadata document(上载元数据文档),然后选择您之前从提供商下载的元数据文件。

    注意

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

  11. 在您的 SAML 提供商和用户池之间映射属性,将 SAML 提供商属性映射到用户池中的用户配置文件。在属性映射中包含用户池必需属性。

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

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

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

为 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

获取有关特定 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

列出所有相关信息 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

删除 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

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

    https://mydomain.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 控制台

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

  3. 选择登录体验选项卡,找到联邦身份提供商登录信息。

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

  5. 当系统提示您 Delete identity provider(删除身份提供商)时,请输入 SAML 提供商的名称以确认删除,然后选择 Delete(删除)。