向用户池添加 SAML 身份提供商
可以选择允许 Web 和移动应用程序用户通过 SAML 身份提供程序 (IdP)(如 Microsoft Active Directory 联合身份验证服务 (ADFS)
利用内置托管 Web UI,Amazon Cognito 将为所有经过身份验证的用户提供令牌处理和管理。这样,后端系统可以基于一组用户池令牌实现标准化。您可以通过 Amazon CLI 或使用 Amazon Cognito API 调用在 Amazon Web Services Management Console 中创建和管理 SAML IdP。要开始使用控制台,请参阅使用 Amazon Web Services Management Console将“通过基于 SAML 的身份提供商登录”添加到用户池。

注意
通过第三方(联合身份验证)进行登录可在 Amazon Cognito 用户池中实现。此功能不依赖于通过 Amazon Cognito 身份池(联合身份)实现的联合身份验证。
您需要更新 SAML IdP 并配置用户池以支持此提供商。请参阅 SAML IdP 的文档,了解有关如何将您的用户池添加为 SAML 2.0 IdP 的依赖方或应用程序的信息。
Amazon Cognito 用户群体支持 SAML 2.0 与 POST 绑定端点联合身份验证。这使您的应用程序不必检索或分析 SAML 断言响应,因为用户池直接通过用户代理从 IdP 接收 SAML 响应。您的用户池代表您的应用程序充当服务提供商(SP)。Amazon Cognito 支持 SP 发起的单点登录(SSO),如 SAML V2.0 技术概览
关于 Amazon Cognito 用户群体中的 SAML IdP 需要了解的事项
-
Amazon Cognito 和您的 SAML IdP 使用
relayState
参数维护会话信息。-
Amazon Cognito 支持大于 80 个字节的
relayState
值。虽然 SAML 规范规定relayState
值“长度不得超过 80 个字节”,但目前的行业惯例往往偏离这种行为。因此,拒绝超过 80 个字节的relayState
值将破坏许多标准 SAML 提供商集成。 -
RelayState 令牌是对 Amazon Cognito 维护的状态信息的不透明引用。Amazon Cognito 不保证
relayState
参数的内容。不要解析其内容,以免您的应用程序依赖解析结果。有关更多信息,请参阅 SAML 2.0 规范。
-
-
您的 SAML 身份提供者要求您设置断言使用者端点。您的 IdP 使用 SAML 断言将您的用户重定向到此端点。在用户群体域中为您的 SAML 身份提供者中的 SAML 2.0 POST 绑定配置以下端点。您可以在 Amazon Cognito 控制台
的应用程序集成选项卡上,找到用户群体的 <yourDomainPrefix>
和<Region>
的值。有关用户群体域的更多信息,请参阅 配置用户池域。
https://
Your user pool domain
/saml2/idpresponse With an Amazon Cognito domain: https://<yourDomainPrefix>
.auth.<region>
.amazoncognito.com/saml2/idpresponse With a custom domain: https://Your custom domain
/saml2/idpresponse-
Amazon Cognito
saml2/idpresponse
端点不接受加密的 SAML 断言。 -
您无法向您的 Amazon Cognito
saml2/idpresponse
端点重复或重放 SAML 断言。重放的 SAML 断言的断言 ID 与早期 IdP 响应的 ID 重复。
-
-
您必须向 IdP 提供服务提供商(SP)
urn
,也称为受众 URI 或 SP 实体 ID。用户群体的受众 URI 采用以下格式。urn:amazon:cognito:sp:
<your user pool ID>
您可以在 Amazon Cognito 控制台
的用户群体概览下找到 <yourUserPoolID>
的值。 -
配置 SAML IdP,为用户群体中根据需要设置的任何属性提供值。例如,
email
是用户群体的通用必需属性。在您的用户可以登录之前,SAML IdP 断言必须包含映射到用户群体属性email
的声明。有关属性映射的更多信息,请参阅指定适用于用户池的身份提供商属性映射。 -
SAML IdP 必须在 SAML 响应中包含以下声明。
-
一项
AudienceRestriction
声明,所具有的Audience
值将您的用户群体 SP 实体 ID 设置为响应的目标。<saml:AudienceRestriction> <saml:Audience> urn:amazon:cognito:sp:
<your user pool ID>
</saml:AudienceRestriction> -
一项
Response
声明,具有原始 SAML 请求 ID 的InResponseTo
值。<saml2p:Response Destination="https://
<your user pool domain>
/saml2/idpresponse" ID="id123
" InResponseTo="_dd0a3436-bc64-4679-a0c2-cb4454f04184" IssueInstant="Date-time stamp
" Version="2.0" xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:xs="http://www.w3.org/2001/XMLSchema"> -
一项
SubjectConfirmationData
声明,具有用户群体saml2/idpresponse
端点的Recipient
值,以及与原始 SAML 请求 ID 匹配的InResponseTo
值。<saml2:SubjectConfirmationData InResponseTo="_dd0a3436-bc64-4679-a0c2-cb4454f04184" NotOnOrAfter="
Date-time stamp
" Recipient="https://<your user pool domain>
/saml2/idpresponse"/>
-
-
当 对端点授权 将用户定向到您的 IdP 登录页面时,Amazon Cognito 会在
HTTP GET
请求的 URL 参数中包括 SAML 请求。SAML 请求包含有关用户群体和saml2/idpresponse
端点的信息。Amazon Cognito 不对 SAML 请求进行签名。 -
Amazon Cognito 将加密签名应用于用户传递到 IdP 的注销端点的注销请求。要与这些注销请求建立信任,您可以向 IdP 提供用户群体 SAML 2.0 签名证书的副本。在 Amazon Cognito 控制台的登录体验选项卡中检索签名证书。