本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在用户池中添加和力 SAML 身份提供者
将身份提供者配置为与 Amazon Cognito 配合使用后,您可以将其添加到用户池和应用程序客户端。以下步骤演示了如何在 Amazon Cognito 用户池中创建、修改和删除 SAML 提供者。
- AWS Management Console
-
您可以使用 AWS Management Console 来创建和删除 SAML 身份提供商 (IdPs)。
在创建 SAML IdP 之前,您必须具有从第三方 IdP 处获得的 SAML 元数据文档。有关如何获取或生成所需的 SAML 元数据文档的说明,请参阅配置第三方 SAML 身份提供者。
在您的用户池中配置 SAML 2.0 IdP
-
转到 Amazon Cognito 控制台
。如果出现提示,请输入 AWS 凭证。 -
选择用户池。
-
从列表中选择一个现有用户池,或创建一个用户池。
-
选择 “社交和外部提供商” 菜单,然后选择 “添加身份提供商”。
-
选择一个 SAML IdP。
-
输入提供商名称。您可以在
identity_provider
请求参数中将这个友好名称传递给 对端点授权。 -
输入以逗号分隔的 Identifiers(标识符)。标识符将告知 Amazon Cognito 应该检查用户登录时输入的电子邮件地址,然后将它们引导到与其域名对应的提供商。
-
如果您希望 Amazon Cognito 在用户注销时向您的提供商发送已签名的注销请求,请选择 Add sign-out flow(添加注销流程)。您必须将 SAML 2.0 IdP 配置为向配置托管登录时创建
https://
的终端节点发送注销响应。此mydomain.us-east-1.amazoncognito.com
/saml2/logoutsaml2/logout
端点使用 POST 绑定。注意
如果选择此选项,且您的 SAML IdP 需要已签署的注销请求,则还必须为您的 SAML IdP 提供来自用户池的签名证书。
SAML IdP 将处理已签名的注销请求并从 Amazon Cognito 会话中注销您的用户。
-
选择 IdP 发起的 SAML 登录配置。作为一项安全最佳实践,请选择仅接受 SP 发起的 SAML 断言。如果您已准备好环境,以便安全地接受未经请求的 SAML 登录会话,请选择接受 SP 发起和 IdP 发起的 SAML 断言。有关更多信息,请参阅 SAML 会话在 Amazon Cognito 用户池中启动。
-
选择 Metadata document source(元数据文档源)。如果您的 IdP 在公有 URL 上提供 SAML 元数据,则可以选择 Metadata document URL(元数据文档 URL),然后输入该公有 URL。否则,请选择 Upload metadata document(上载元数据文档),然后选择您之前从提供商下载的元数据文件。
注意
如果您的提供者具有公有端点,我们建议您输入元数据文档 URL,而不是上传文件。Amazon Cognito 会自动从元数据 URL 刷新元数据。通常,元数据刷新操作每 6 小时执行一次或在元数据过期前执行(以时间较早者为准)。
-
在 SAML 提供者和用户池之间映射属性选项将 SAML 提供者属性映射到用户池中的用户配置文件。在属性映射中包含用户池必需属性。
例如,当您选择 User pool attribute(用户池属性)
email
时,按照您的 IdP 提供的 SAML 断言中显示的内容,输入 SAML 属性名称。如果 IdP 提供了示例 SAML 断言,您可以使用这些示例断言帮助您查找名称。有些 IdPs 使用简单的名称,例如email
,而另一些则使用如下所示的名称。http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
-
选择创建。
-
- 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-mappingemail
=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-mappingemail
=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-mappingemail
=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-mappingemail
=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:
。Amazon Cognito 要求受众限制值与 SAML 响应中的这个 URN 相匹配。将您的 IdP 配置为使用以下 POST 绑定端点 IdP-to-SP作为响应消息。us-east-1_EXAMPLE
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 提供者
-
在导航窗格中,选择 User Pools(用户池),然后选择要编辑的用户池。
-
选择 “社交和外部提供商” 菜单。
-
选择要删除的 SAML IdPs 旁边的单选按钮。
-
当系统提示您 Delete identity provider(删除身份提供商)时,请输入 SAML 提供商的名称以确认删除,然后选择 Delete(删除)。