在用户池中添加和力 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. 选择 “社交和外部提供商” 菜单,然后选择 “添加身份提供商”。

  5. 选择一个 SAML IdP。

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

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

  8. 如果您希望 Amazon Cognito 在用户注销时向您的提供商发送已签名的注销请求,请选择 Add sign-out flow(添加注销流程)。您必须将 SAML 2.0 IdP 配置为向配置托管登录时创建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 会自动从元数据 URL 刷新元数据。通常,元数据刷新操作每 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 并上传元数据文档
  • 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 要求受众限制值与 SAML 响应中的这个 URN 相匹配。将您的 IdP 配置为使用以下 POST 绑定端点 IdP-to-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(删除)。