SAML 身份提供商名称和标识符 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

SAML 身份提供商名称和标识符


                    使用 IdP 标识符和托管用户界面的 Amazon Cognito SP 发起的 SAML 登录的身份验证流程图。用户向托管用户界面提供电子邮件地址,Amazon Cognito 会自动将其重定向到其提供商。

当您命名您的 SAML 身份提供商 (IdPs) 并分配 IdP 标识符时,您可以自动将 SP 发起的登录和注销请求流向该提供商。有关提供商名称的字符串约束的信息,请参阅的ProviderName属性CreateIdentityProvider

您还可以为 SAML 提供商选择最多 50 个标识符。标识符是用户池中 IdP 的友好名称,在用户池中必须是唯一的。如果您的 SAML 标识符与用户的电子邮件域名匹配,Amazon Cognito 托管的 UI 会请求每个用户的电子邮件地址,评估其电子邮件地址中的域,然后将他们重定向到与其域名对应的 IdP。由于同一个组织可以拥有多个域,因此单个 IdP 可以有多个标识符。

无论您是否使用电子邮件域标识符,都可以在多租户应用程序中使用标识符将用户重定向到正确的 IdP。当你想完全绕过托管用户界面时,你可以自定义向用户提供的链接,这样他们就可以对端点授权直接重定向到他们的 IdP。要使用标识符登录您的用户并重定向到他们的 IdP,请在其初始授权请求的请求参数idp_identifier=myidp.example.com中加入该格式的标识符。

将用户传递给您的 IdP 的另一种方法是identity_provider使用以下 URL 格式的 IdP 名称填充参数。

https://mydomain.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& identity_provider=MySAMLIdP& client_id=1example23456789& redirect_uri=https://www.example.com

用户使用您的 SAML IdP 登录后,您的 IdP 会将他们重定向到您的终端节点,并在正文中显示 SAML 响应。HTTP POST /saml2/idpresponseAmazon Cognito 会处理 SAML 断言,如果响应中的声明符合预期,则会重定向到您的应用程序客户端回传 URL。在您的用户以这种方式完成身份验证后,他们只与您的 IdP 和您的应用程序的网页进行了交互。

使用域格式的 IdP 标识符,Amazon Cognito 托管的 UI 会在登录时请求电子邮件地址,然后,当电子邮件域与 IdP 标识符匹配时,会将用户重定向到其 IdP 的登录页面。例如,您构建的应用程序需要两家不同公司的员工登录。第一家公司 AnyCompany A 拥有exampleA.comexampleA.co.uk。第二家公司 AnyCompany B 拥有exampleB.com。在本示例中,您设置了两个 IdPs,每家公司一个,如下所示:

  • 对于 IdP A,您定义标识符 exampleA.comexampleA.co.uk

  • 对于 IdP B,您定义标识符 exampleB.com

在您的应用程序中,调用应用程序客户端的托管界面,以提示每位用户输入其电子邮件地址。Amazon Cognito 从电子邮件地址派生域,将该域与具有域标识符的 IdP 关联起来,然后通过向包含请求参数的请求将您的用户重定向到正确的 IdP。对端点授权 idp_identifier例如,如果用户进入bob@exampleA.co.uk,则他们与之互动的下一个页面是 IdP 登录页面。https://auth.exampleA.co.uk/sso/saml

您也可以独立实现相同的逻辑。在您的应用程序中,您可以构建一个自定义表单,用于收集用户输入并根据自己的逻辑将其与正确的 IdP 关联起来。您可以为每个应用程序租户生成自定义应用程序门户,其中每个租户都链接到请求参数中包含租户标识符的授权端点。

要在托管 UI 中收集电子邮件地址并解析域名,请为分配给应用程序客户端的每个 SAML IdP 分配至少一个标识符。默认情况下,托管用户界面登录屏幕会为你分配给应用程序客户端 IdPs 的每个用户显示一个按钮。但是,如果您成功分配了标识符,则您的托管用户界面登录页面将如下图所示。


                    Amazon Cognito 托管 UI 登录页面,显示本地用户登录和要求联合身份用户输入电子邮件地址的提示。

在托管 UI 中解析域名需要使用域名作为 IdP 标识符。如果您为应用程序客户端的每个 SAML IdPs 分配了任何类型的标识符,则该应用程序的托管界面将不再显示 IDP 选择按钮。当您打算使用电子邮件解析或自定义逻辑生成重定向时,请为 SAML 添加 IdP 标识符。如果您想生成静默重定向,并且希望您的托管界面显示列表 IdPs,请不要分配标识符,也不要在授权identity_provider请求中使用请求参数。

  • 如果您仅将一个 SAML IdP 分配给您的应用程序客户端,则托管 UI 登录页面会显示一个用于使用该 IdP 登录的按钮。

  • 如果您为应用程序客户端激活的每个 SAML IdP 分配一个标识符,则在托管 UI 登录页面中会出现用户输入电子邮件地址的提示。

  • 如果您有多个 IdPs ,但没有为所有用户分配标识符,则托管用户界面登录页面会显示一个按钮,用于使用每个分配的 IdP 进行登录。

  • 如果您为自己分配了标识符, IdPs 并且希望托管界面显示精选的 IdP 按钮,请向您的应用程序客户端添加一个没有标识符的新 IdP,或者创建一个新的应用程序客户端。您也可以删除现有 IdP,然后在没有标识符的情况下重新添加它。如果您创建新的 IdP,则您的 SAML 用户将创建新的用户个人资料。活跃用户的重复可能会对您更改 IdP 配置的当月产生账单影响。

有关 IdP 设置的更多信息,请参阅为用户池配置身份提供商