SAML 用户池 IdP 身份验证流程
您可以直接从您的用户池集成基于 SAML 的 IdP。
-
应用程序通过将用户定向到由 Amazon 托管的 UI 来开始注册和登录过程。移动应用程序可以使用 Web 视图显示由 Amazon 托管的页。
-
通常,您的用户池将通过用户的电子邮件地址确定用户的 IdP。
或者,如果您的应用程序在将用户定向到用户池之前已收集信息,它可以通过查询参数向 Amazon Cognito 提供这些信息。
-
您的用户将使用 SAML 请求重定向到 IdP。
-
IdP 将对用户进行身份验证(如有必要)。如果 IdP 发现用户具有活动会话,则 IdP 将跳过身份验证以提供单一登录 (SSO) 体验。
-
IdP 以 POST 方式将 SAML 断言发送到 Amazon Cognito 服务。
注意 Amazon Cognito 会取消未在 5 分钟内完成的身份验证请求,并将用户重定向到托管 UI。页面随即显示
Something went wrong
错误消息。 -
在验证 SAML 断言并从断言中收集用户属性(声明)后,Amazon Cognito 在用户池中内部创建或更新用户配置文件。Amazon Cognito 将 OIDC 令牌返回到当前已登录用户的应用程序。
下图显示了此过程的身份验证流程:

当用户进行身份验证后,用户池将返回 ID、访问权限和刷新令牌。ID 令牌是用于身份管理的标准 OIDC 令牌,而访问令牌是标准 OAuth 2.0
作为开发人员,您可以选择刷新令牌的到期时间,从而更改用户需要重新进行身份验证的频率。如果作为联合身份用户的用户已通过外部 IdP 进行身份验证,则应用程序会将 Amazon Cognito 令牌与刷新令牌结合使用来决定用户重新进行身份验证之前经过的时间,而无论外部 IdP 的令牌何时到期。当 ID 和访问令牌过期后,用户池将自动使用刷新令牌来获取新的 ID 和访问令牌。如果刷新令牌也已过期,服务器会通过 Amazon 托管的应用程序中的页面自动启动身份验证。
SAML 用户名区分大小写
当联合身份用户尝试登录时,SAML 身份提供商 (IdP) 在用户的 SAML 断言中将 IdP 目录中的唯一 NameId
传递给 Amazon Cognito。Amazon Cognito 通过其 NameId
声明识别 SAML 联合身份用户。无论您的用户池的区分大小写设置如何,Amazon Cognito 都要求来自 SAML IdP 的联合身份用户传递唯一且区分大小写的 NameId
声明。如果您将 email
等属性映射到 NameId
,并且您的用户更改其电子邮件地址,他们将无法登录您的应用程序。
从具有不会改变的值的 IdP 属性映射 SAML 断言中的 NameId
。
例如,Carlos 在您的不区分大小写的用户池中具有来自 Active Directory 联合身份验证服务 (ADFS) SAML 断言的用户配置文件,该断言传递了Carlos@example.com
的 NameId
值。下次 Carlos 尝试登录时,您的 ADFS IdP 会传递carlos@example.com
的 NameId
值。由于 NameId
的大小写必须完全匹配,登录不成功。
如果您的用户在其 NameID
更改后无法登录,请从您的用户池中删除他们的用户配置文件。Amazon Cognito 将在用户下次登录时创建新的用户配置文件。