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

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

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

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

AWS Management Console

您可以使用 AWS Management Console 来创建和删除SAML身份提供者 (IdPs)。

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

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

  2. 选择用户池

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

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

  5. 选择一个 SAMLIdP。

  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 需要签名的注销请求,则您还必须向 I SAML dP 提供用户池中的签名证书。

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

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

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

    注意

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

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

    例如,当您选择 “用户池属性”email,输入您的 IdP SAML 断言中显示的SAML属性名称。如果您的 IdP 提供示例SAML断言,则可以使用这些示例断言来帮助您找到名称。有些 IdPs 使用简单的名称,例如email,而另一些则使用如下所示的名称。

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

API/CLI

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

创建 IdP 并上传元数据文档
  • AWS 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

  • AWS API: CreateIdentityProvider

为 IdP 上传新的元数据文档
  • AWS 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

  • AWS API: UpdateIdentityProvider

获取有关特定 IdP 的信息
  • AWS 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

  • AWS API: DescribeIdentityProvider

列出所有相关信息 IdPs
  • AWS CLI: aws cognito-idp list-identity-providers

    例如:aws cognito-idp list-identity-providers --user-pool-id us-east-1_EXAMPLE --max-results 3

  • AWS API: ListIdentityProviders

删除 IdP
  • AWS 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

  • AWS API: DeleteIdentityProvider

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

    https://mydomain.us-east-1.amazoncognito.com/saml2/idpresponse
  • 您的 SAML IdP 必须在断言中填充NameID用户池的所有必需属性。SAML 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. 当系统提示您删除身份提供商时,请输入SAML提供商的名称以确认删除,然后选择删除