

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

# 用户池区分大小写
<a name="user-pool-case-sensitivity"></a>

默认情况下，您在中创建的 Amazon Cognito 用户池不区分大小写。 AWS 管理控制台 当用户池不区分大小写时，*user@example.com* 和 *User@example.com* 指的是同一个用户。当用户池中的用户名不区分大小写时，`preferred_username` 和 `email` 属性也不区分大小写。

不区分大小写不仅适用于属性输入，也适用于输出。 Mixed-case不区分大小写的用户池中的属性值在用户池文本输出中被扁平化为小写。用户池文本输出的示例包括 [ UserInfo ](userinfo-endpoint.md) 响应、用户查询响应（例如的[GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html)输出）以及 [ Lambda 触发器的输入事件。](cognito-user-pools-working-with-lambda-triggers.md)

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

**注意**  
无论您的用户池的区分大小写设置如何，Amazon Cognito 都要求来自 SAML 或 OIDC 身份提供商（IdP）的联合用户传递唯一且区分大小写的 `NameId` 或 `sub` 声明。有关唯一标识符区分大小写和 SAML 的更多信息 IdPs，请参阅[实现 SP-initated SAML 登录](cognito-user-pools-SAML-session-initiation.md#cognito-user-pools-saml-idp-authentication)。

创建区分大小写的用户池  
如果您使用 AWS Command Line Interface (AWS CLI) 和 API 操作（例如）创建资源 [ CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)，则必须将布尔`CaseSensitive`参数设置为`false`。此设置将创建不区分大小写的用户池。如果您不指定值，`CaseSensitive` 默认为 `true`。您在 Amazon Cognito 控制台中创建的用户池不区分大小写。要生成区分大小写的用户池，必须使用 `CreateUserPool` 操作。2020 年 2 月 12 日之前，无论平台如何，用户池都默认区分大小写。  
在的**Sign-in**菜单 AWS 管理控制台 和的`UsernameConfiguration`属性中 [ DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserPoolType.html#CognitoUserPools-Type-UserPoolType-UsernameConfiguration)，您可以查看账户中每个用户池的区分大小写设置。

迁移到新的用户池  
由于用户配置文件之间存在潜在冲突，您无法将 Amazon Cognito 用户池从区分大小写更改为不区分大小写。相反，请将用户迁移到新的用户池。您必须构建迁移代码才能解决与大小写相关的冲突。此代码必须返回唯一的新用户，或者在检测到冲突时拒绝登录尝试。在新的不区分大小写的用户池中，分配一个 [迁移用户 Lambda 触发器](user-pool-lambda-migrate-user.md)。该 AWS Lambda 函数可以在新的不区分大小写的用户池中创建用户。当用户使用不区分大小写的用户池登录失败时，Lambda 函数会从区分大小写的用户池中查找并复制该用户。您还可以在[ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html)事件上激活迁移用户 Lambda 触发器。Amazon Cognito 会将用户信息和事件元数据从登录或密码恢复操作传递到您的 Lambda 函数。当函数在不区分大小写的用户池中创建新用户时，您可以使用事件数据来管理用户名和电子邮件地址之间的冲突。这些冲突是用户名和电子邮件地址之间的冲突，这些名称和地址在区分大小写的用户池中是唯一的，但在不区分大小写的用户池中则相同。  
有关如何在亚马逊 Cognito 用户池之间使用迁移用户 Lambda 触发器的更多信息，请参阅博客[中的](https://aws.amazon.com/blogs/mobile/migrating-users-to-amazon-cognito-user-pools/)将用户迁移到亚马逊 Cognito 用户池。 AWS 