Cognito用户池默认是否真的不区分大小写?登录异常求助
问题(翻译)
我创建了一个将邮箱设为唯一登录字段的Amazon Cognito用户池,但使用包含大写字母的邮箱登录时,收到「用户名或密码错误」的提示。根据Cognito文档说明,通过AWS管理控制台创建的用户池默认不区分大小写,此时user@example.com与User@example.com应视为同一用户,preferred_username和email属性也不区分大小写。我查看了用户池配置,只看到"UsernameAttributes": ["email"],没找到大小写相关的配置项。请问有什么方法可以确认邮箱登录的默认行为?
解决方案
通过API验证用户一致性
调用AdminGetUserAPI,分别传入小写和大写格式的邮箱作为Username参数。如果两次请求返回的是同一个用户的完整数据,说明用户池默认遵循不区分大小写规则;若其中一次返回用户不存在,则意味着用户池实际启用了大小写敏感(比如通过CLI或CloudFormation创建时手动设置了CaseSensitive为true,控制台创建的默认值为false,但不排除后续配置被修改)。用CLI查看完整用户池配置
控制台界面不会直接展示CaseSensitive字段,可通过AWS CLI命令获取完整配置:aws cognito-idp describe-user-pool --user-pool-id <你的用户池ID>在返回的JSON结果中查找
CaseSensitive字段:- 值为
false:符合控制台创建的默认规则,不区分大小写 - 值为
true:用户池启用了大小写敏感,此状态下大小写邮箱会被视为不同用户
- 值为
测试注册登录流程
用小写邮箱注册新用户,随后尝试用对应大写邮箱登录:- 登录成功:说明默认行为是不区分大小写,之前的报错可能是客户端代码或自定义触发器导致的问题
- 登录失败:检查是否存在预认证Lambda触发器,是否在触发器中添加了大小写校验逻辑,拦截了非小写邮箱的登录请求
检查用户属性存储状态
进入AWS控制台的Cognito用户池,找到目标用户,查看email属性的实际存储值。若存储的是小写,但大写邮箱登录失败,排查客户端代码是否在请求前未统一将邮箱转为小写,或是否有自定义认证流程覆盖了Cognito的默认大小写处理逻辑。
内容的提问来源于stack exchange,提问作者LurenzZ

