用户池区分大小写 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

用户池区分大小写

默认情况下,您在 Amazon Web Services Management Console 中创建的 Amazon Cognito 用户池不区分大小写。当用户池不区分大小写时,user@example.comUser@example.com 指的是同一个用户。当用户池中的用户名不区分大小写时,preferred_usernameemail 属性也不区分大小写。

要考虑用户池区分大小写设置,请根据备用用户属性识别应用程序代码中的用户。由于用户名、首选用户名或电子邮件地址属性的大小写在不同的用户配置文件中可能有所不同,因此请参阅 sub 属性。您还可以在用户池中创建不可变的自定义属性,并为每个新用户配置文件中的属性分配自己的唯一标识符值。首次创建用户时,可以将值写入您创建的不可改变的自定义属性。

注意

无论您的用户池的区分大小写设置如何,Amazon Cognito 都要求来自 SAML 或 OIDC 身份提供商 (IdP) 的联合身份用户传递唯一且区分大小写的 NameIdsub 声明。有关唯一标识符区分大小写和 SAML IdP 的更多信息,请参阅SAML 用户池 IdP 身份验证流程

创建区分大小写的用户池

如果您使用 Amazon Command Line Interface (Amazon CLI) 和 API 操作(如 CreateUserPool)创建资源,则必须将布尔型 CaseSensitive 参数设置为 false。此设置将创建不区分大小写的用户池。如果您不指定值,CaseSensitive 默认为 true。此默认设置与您在 Amazon Web Services Management Console 中创建的用户池的默认行为相反。2020 年 2 月 12 日之前,无论平台如何,用户池都默认区分大小写。

您可以使用 Amazon Web Services Management Console 的 Sign-in experience(登录体验)选项卡或 DescribeUserPool API 操作来查看您账户中每个用户池的区分大小写设置。

迁移到新的用户池

由于用户配置文件之间存在潜在冲突,您无法将 Amazon Cognito 用户池从区分大小写更改为不区分大小写。相反,请将用户迁移到新的用户池。您必须构建迁移代码才能解决与大小写相关的冲突。此代码必须返回唯一的新用户,或者在检测到冲突时拒绝登录尝试。在新的不区分大小写的用户池中,分配一个 迁移用户 Lambda 触发器。Amazon Lambda 函数可以在新的不区分大小写的用户池中创建用户。当用户使用不区分大小写的用户池登录失败时,Lambda 函数会从区分大小写的用户池中查找并复制该用户。您还可以在 ForgotPassword 事件上激活迁移用户 Lambda 触发器。Amazon Cognito 会将用户信息和事件元数据从登录或密码恢复操作传递到您的 Lambda 函数。当函数在不区分大小写的用户池中创建新用户时,您可以使用事件数据来管理用户名和电子邮件地址之间的冲突。这些冲突是用户名和电子邮件地址之间的冲突,这些名称和地址在不区分大小写的用户池中唯一,但在区分大小写的用户池中则相同。

有关如何在 Amazon Cognito 用户池之间使用迁移用户 Lambda 触发器的更多信息,请参阅 Amazon 博客中的将用户迁移到 Amazon Cognito 用户池