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

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

用户池区分大小写

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

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

注意

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

创建区分大小写的用户池

如果您使用 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或 DescribeUserPoolAPI 操作的 “登录体验” 选项卡来查看账户中每个用户池的区分大小写设置。

迁移到新的用户池

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

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