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

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

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 设置的更多信息,请参阅为用户池配置身份提供商