用户池区分大小写
默认情况下,您在 Amazon Web Services 管理控制台 中创建的 Amazon Cognito 用户池不区分大小写。当用户池不区分大小写时,user@example.com 和 User@example.com 指的是同一个用户。当用户池中的用户名不区分大小写时,preferred_username 和 email 属性也不区分大小写。
不区分大小写不仅适用于属性输入,也适用于输出。在不区分大小写的用户池中,混合大小写的属性值在用户池的文本输出中会被统一为小写。用户池文本输出的示例包括 userInfo 响应、用户查询响应(例如 GetUser 的输出)以及传递给 Lambda 触发器的输入事件。
要考虑用户池区分大小写设置,请根据备用用户属性识别应用程序代码中的用户。由于用户名、首选用户名或电子邮件地址属性的大小写在不同的用户配置文件中可能有所不同,因此请改为参阅 sub 属性。您还可以在用户池中创建不可变的自定义属性,并为每个新用户配置文件中的属性分配自己的唯一标识符值。首次创建用户时,可以将值写入您创建的不可改变的自定义属性。
注意
无论您的用户池的区分大小写设置如何,Amazon Cognito 都要求来自 SAML 或 OIDC 身份提供商(IdP)的联合用户传递唯一且区分大小写的 NameId 或 sub 声明。有关唯一标识符区分大小写和 SAML IdP 的更多信息,请参阅实施 SP 发起的 SAML 登录。
- 创建区分大小写的用户池
-
如果您使用 Amazon Command Line Interface(Amazon CLI)和 API 操作(如 CreateUserPool)创建资源,则必须将布尔型
CaseSensitive参数设置为false。此设置将创建不区分大小写的用户池。如果您不指定值,CaseSensitive默认为true。您在 Amazon Cognito 控制台中创建的用户池不区分大小写。要生成区分大小写的用户池,必须使用CreateUserPool操作。2020 年 2 月 12 日之前,无论平台如何,用户池都默认区分大小写。您可以在 Amazon Web Services 管理控制台 的登录菜单中,以及通过 DescribeUserPool 的
UsernameConfiguration属性,查看账户中每个用户池的大小写敏感设置。 - 迁移到新的用户池
-
由于用户配置文件之间存在潜在冲突,您无法将 Amazon Cognito 用户池从区分大小写更改为不区分大小写。相反,请将用户迁移到新的用户池。您必须构建迁移代码才能解决与大小写相关的冲突。此代码必须返回唯一的新用户,或者在检测到冲突时拒绝登录尝试。在新的不区分大小写的用户池中,分配一个 迁移用户 Lambda 触发器。Amazon Lambda 函数可以在新的不区分大小写的用户池中创建用户。当用户使用不区分大小写的用户池登录失败时,Lambda 函数会从区分大小写的用户池中查找并复制该用户。您还可以在 ForgotPassword 事件上激活迁移用户 Lambda 触发器。Amazon Cognito 会将用户信息和事件元数据从登录或密码恢复操作传递到您的 Lambda 函数。当函数在不区分大小写的用户池中创建新用户时,您可以使用事件数据来管理用户名和电子邮件地址之间的冲突。这些冲突是用户名和电子邮件地址之间的冲突,这些名称和地址在区分大小写的用户池中是唯一的,但在不区分大小写的用户池中则相同。
有关如何在 Amazon Cognito 用户池之间使用迁移用户 Lambda 触发器的更多信息,请参阅 Amazon 博客中的将用户迁移到 Amazon Cognito 用户池
。