

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

# 以管理员身份创建用户账户
<a name="how-to-create-user-accounts"></a>

用户池不仅仅是客户身份和访问管理（CIAM）用户目录，互联网上的任何人都可以在您的应用程序中注册用户配置文件。您可以禁用自助注册。您可能已经认识您的客户，并且只想接纳那些事先获得授权的客户。您可以使用[私有 SAML 2.0 或 OIDC 身份提供者](cognito-user-pools-identity-federation.md)、通过[导入用户](cognito-user-pools-import-users.md)、通过[在注册时筛选用户](user-pool-lambda-pre-sign-up.md)，或者通过使用管理 API 操作创建用户，您可以在应用程序周围设置手动身份验证护栏。您的用户管理创建工作流程可以是编程的，即在用户在其他系统中注册后对其进行配置，也可以在 Amazon Cognito 控制台中进行 case-by-case或测试。

当您以管理员身份创建用户时，Amazon Cognito 会为他们设置临时密码并发送欢迎或邀请消息。他们可以点击邀请消息中的链接进行首次登录、设置密码并确认其账户。以下页面说明了如何创建新用户和配置欢迎消息。有关使用用户池 API 和 Amazon SDK 或 CDK 创建用户的更多信息，请参阅[AdminCreateUser](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html)。

创建用户池后，您可以使用 Amazon Web Services 管理控制台、以及 Amazon Command Line Interface 或 Amazon Cognito API 创建用户。您可以为用户池中的新用户创建配置文件，并通过 SMS 或电子邮件向用户发送带有注册说明的欢迎消息。

以下是管理员如何管理用户池中的用户的一些示例。
+ 在 Amazon Cognito 控制台中或通过 `AdminCreateUser` API 操作创建新用户配置文件。
+ 将无密码 username-and-password、密钥和自定义[身份验证流程](amazon-cognito-user-pools-authentication-flow-methods.md)提供给您的用户池和应用程序客户端。
+ 设置用户属性值。
+ 创建自定义属性。
+ 在 `AdminCreateUser` API 请求中设置不可变[自定义属性](user-pool-settings-attributes.md#user-pool-settings-custom-attributes)的值。此功能在 Amazon Cognito 控制台中不可用。
+ 指定临时密码，创建没有密码的用户，或者允许 Amazon Cognito 自动生成密码。
+ 创建新用户并自动确认其账户，验证他们的电子邮件地址或验证他们的电话号码。
+ 通过 Amazon Web Services 管理控制台 或 Lambda 触发器（如自定义消息、自定义短信发送器和[自定义电子邮件发[件人）为新用户指定自定义短信](user-pool-lambda-custom-sms-sender.md)和[电子邮件](user-pool-lambda-custom-email-sender.md)邀请消息](user-pool-lambda-custom-message.md)。
+ 指定是否通过 SMS、电子邮件或两者发送邀请消息。
+ 通过调用 `AdminCreateUser` API，并为 `RESEND` 参数指定 `MessageAction`，向现有用户重新发送欢迎消息。
+ 创建用户时[禁止](#admincreateuserwalkthrough-step-invitationmessage)发送邀请消息。
+ 为新用户账户指定长达 90 天的到期时间限制。
+ 允许用户自行注册或要求只能由管理员添加新用户。

管理员还可以在服务器端应用程序中使用 Amazon 凭据登录用户。有关更多信息，请参阅 [API 和 SDK 身份验证的授权模型](authentication-flows-public-server-side.md)。

## 用户身份验证流程和创建用户
<a name="how-to-create-user-accounts-flows"></a>

根据用户池的配置，以管理员身份创建用户的选项会有所不同。*身份验证流程*或可供用户登录和 MFA 的方法可以更改您创建用户以及向他们发送的消息的方式。以下是用户池中可用的一些身份验证流程。
+ 用户名和密码
+ 通行密钥
+ 使用第三方登录 IdPs
+ 无需密码，使用电子邮件和短信一次性密码 () OTPs
+ 使用电子邮件、短信和身份验证器应用程序进行多因素身份验证 OTPs
+ 使用 Lambda 触发器的自定义身份验证

有关如何配置这些登录因素的更多信息，请参阅[使用 Amazon Cognito 用户池进行身份验证](authentication.md)。

## 创建无密码用户
<a name="how-to-create-user-accounts-thingstoknow-passwordless"></a>

如果您为用户池启用了无密码登录，则可以创建无密码用户。要创建无密码用户，必须为可用的无密码登录因素提供属性值。例如，如果您的用户池中提供电子邮件 OTP 无密码登录，则可以创建一个没有密码和电子邮件地址属性的用户。如果新用户只能通过密码执行身份验证流程，例如通行密钥或用户名密码，则必须为每个新用户创建或生成临时密码。

**创建新的无密码用户**
+ 在 Amazon Cognito 控制台中选择**请勿设置密码**
+ 忽略 `AdminCreateUser` API 请求的 `TemporaryPassword` 参数或将其留空

**无密码用户会自动得到确认**  
通常，当您创建新用户时，他们会获得临时密码并进入 `FORCE_CHANGE_PASSWORD` 状态。当您创建无密码用户时，他们会立即进入 `CONFIRMED` 状态。您无法向这些处于 `CONFIRMED` 状态的用户重新发送确认码。

**邀请消息会针对无密码用户发生变化。**  
默认情况下，Amazon Cognito 会向新用户发送一条[邀请消息](cognito-user-pool-settings-message-customizations.md#cognito-user-pool-settings-user-invitation-message-customization)，显示 `Your username is {userName} and your password is {####}.`。当您创建无密码用户时，消息会显示为 `Your username is {userName}.`。自定义您的邀请消息，以反映您是否要为用户设置密码。请在无密码身份验证模型中忽略 `{####}` 密码变量。

**当无密码因素可用时，您无法自动生成密码**  
如果您已将用户池配置为支持电子邮件或电话 OTP 无密码登录，则无法自动生成密码。对于每位将拥有密码的用户，在创建其配置文件时都必须设置一个临时密码。

**无密码用户必须具有所有必需属性的值**  
在创建*无*密码用户时，只有当用户为用户池中已标记为必填的所有属性都提供值时，您的请求才会成功。这适用于任何必需属性，而不仅仅是发送 OTP 所需的电话号码和电子邮件属性。

## 创建稍后将提供必需属性值的用户
<a name="how-to-create-user-accounts-thingstoknow-password-restrictions"></a>

您可能想在用户池中要求提供属性，但在以管理员身份创建用户之后，在应用程序中的用户交互期间收集这些属性。管理员可以在使用*临时密码*创建用户时忽略必需属性的值。您不能忽略无密码用户的必需属性值。

缺少必需属性值且使用临时密码的用户在首次登录时会收到 [NEW\$1PASSWORD\$1REQUIRED](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html#CognitoUserPools-RespondToAuthChallenge-request-ChallengeResponses) 质询。然后，他们可以在 `requiredAttributes` 参数中为缺少的必需属性提供一个值。只有当所有必需属性都[可变](user-pool-settings-attributes.md#user-pool-settings-custom-attributes)时，才能创建带有密码但没有必需属性的用户。只有当必需属性可从用户登录时使用的应用程序客户端[写入](user-pool-settings-client-apps.md#cognito-user-pools-app-idp-settings-about)时，用户才能通过 `NEW_PASSWORD_REQUIRED` 质询和必需属性值完成登录。

当您为管理员创建的用户设置永久密码时，他们的状态会更改为 `CONFIRMED`，并且您的用户池在他们首次登录时不会提示他们输入新密码*或*必需属性。

## 在中创建新用户 Amazon Web Services 管理控制台
<a name="creating-a-new-user-using-the-console"></a>

您可以设置用户密码要求、配置发送给用户的邀请和验证消息，以及使用 Amazon Cognito 控制台添加新用户。

### 设置密码策略并启用自行注册
<a name="set-user-password-policy"></a>

您可以配置设置以最大限度地降低密码复杂性，以及用户是否可以在您的用户池 APIs 中使用公共方式进行注册。

**配置密码策略**

1. 导航到 [Amazon Cognito 控制台](https://console.amazonaws.cn/cognito/home)，选择**用户池**。

1. 从列表中选择一个现有用户池，或[创建一个用户池](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)。

1. 选择**身份验证方法**菜单并找到**密码策略**。选择**编辑**。

1. 选择**自定义**的**密码策略模式**。

1. 选择**密码最小长度**。有关密码长度要求的限制，请参阅[用户池资源配额](https://docs.amazonaws.cn/cognito/latest/developerguide/limits.html#limits-hard)。

1. 选择**密码复杂性**要求。

1. 选择管理员设置的密码应在多长时间内有效。

1. 选择**保存更改**。

**允许自助注册**

1. 导航到 [Amazon Cognito 控制台](https://console.amazonaws.cn/cognito/home)，选择**用户池**。

1. 从列表中选择一个现有用户池，或[创建一个用户池](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)。

1. 选择**注册**菜单并找到**自助注册**。选择**编辑**。

1. 选择是否**启用自助注册**。自助注册通常用于需要在不分发客户端密钥或 Amazon Identity and Access Management (IAM) API 凭证的情况下在用户池中注册新用户的公共应用程序客户端。
**禁用自助注册**  
如果您不启用自助注册，则必须通过使用 IAM API 凭证的管理 API 操作或通过联合提供商登录来创建新用户。

1. 选择**保存更改**。

### 自定义电子邮件和 SMS 消息
<a name="creating-a-new-user-customize-messages"></a>

**自定义用户消息**

当您邀请用户登录、注册用户账户或登录并提示用户进行多重身份验证（MFA）时，您可以自定义 Amazon Cognito 发送给用户的消息。
**注意**  
当您在用户池中创建用户并邀请他们登录时将发送**邀请消息**。Amazon Cognito 将初始登录信息发送到用户的电子邮件地址或电话号码。  
当用户在您的用户池中注册用户账户时将发送**验证消息**。Amazon Cognito 向用户发送代码。当用户向 Amazon Cognito 提供代码时，他们会验证自己的联系人信息并确认自己的账户以进行登录。验证代码的有效期为 24 小时。  
当您在用户池中启用 SMS MFA，并且已配置 SMS MFA 的用户登录并提示输入 MFA 时，将发送 **MFA 消息**。

1. 导航到 [Amazon Cognito 控制台](https://console.amazonaws.cn/cognito/home)，选择**用户池**。

1. 从列表中选择一个现有用户池，或[创建一个用户池](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)。

1. 选择**消息模板**菜单并选择**验证消息**、**邀请消息**或 **MFA 消息**，然后选择**编辑**。

1. 自定义所选消息类型的消息。
**注意**  
自定义消息时，必须包括消息模板中的所有变量。如果变量（例如，**\$1\$1\$1\$1\$1\$1**）不包括在内，您的用户将没有足够的信息来完成消息操作。  
有关更多信息，请参阅[消息模板](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-user-pool-settings-message-templates.html)。

1. 

   1. **验证消息**

      1. 选择用于**电子邮件**消息的**验证类型**。**代码**验证将发送用户必须输入的数字代码。**链接**验证将发送一个链接，用户可以点击该链接以验证其联系人信息。用于**链接**消息变量中的文本显示为超链接文本。例如，使用变量 \$1\$1\$1Click here\$1\$1\$1 的消息模板在电子邮件中显示为[单击此处]()。

      1. 输入用于**电子邮件**消息的**电子邮件主题**。

      1. 输入用于**电子邮件**消息的自定义**电子邮件消息**模板。您可以使用 HTML 自定义此模板。

      1. 输入用于 **SMS** 消息的自定义 **SMS 消息**模板。

      1. 选择**保存更改**。

   1. **邀请消息**

      1. 输入用于**电子邮件**消息的**电子邮件主题**。

      1. 输入用于**电子邮件**消息的自定义**电子邮件消息**模板。您可以使用 HTML 自定义此模板。

      1. 输入用于 **SMS** 消息的自定义 **SMS 消息**模板。

      1. 选择**保存更改**。

   1. **MFA 消息**

      1. 输入用于 **SMS** 消息的自定义 **SMS 消息**模板。

      1. 选择**保存更改**。

### 创建用户
<a name="creating-a-new-user-using-the-users-tab"></a>

**创建用户**

您可以从 Amazon Cognito 控制台为用户池创建新用户。通常，用户可以在设置密码后登录。要使用电子邮件地址登录，用户必须验证 `email` 属性。要使用电话号码登录，用户必须验证 `phone_number` 属性。要以管理员身份确认账户，您还可以使用 Amazon CLI 或 API，或者使用联合身份提供商创建用户个人资料。有关更多信息，请参阅 [Amazon Cognito API 参考](https://docs.amazonaws.cn/cognitoidentity/latest/APIReference/)。

1. 导航到 [Amazon Cognito 控制台](https://console.amazonaws.cn/cognito/home)，选择**用户池**。

1. 从列表中选择一个现有用户池，或[创建一个用户池](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)。

1. 选择**用户**菜单，然后选择**创建用户**。

1. 检查**用户池登录和安全要求**以获取有关密码要求、可用的账户恢复方法和用户池的别名属性的指导。

1. <a name="admincreateuserwalkthrough-step-invitationmessage"></a>选择您希望如何发送**邀请消息**。选择 SMS 消息和/或电子邮件消息。要禁止邀请消息，请选择**不要发送邀请**。
**注意**  
在您可以发送邀请消息之前，请在用户池的**身份验证方法**菜单中使用 Amazon Simple Notification Service 和 Amazon Simple Email Service 配置发件人和 Amazon Web Services 区域 。收件人消息和数据费率适用。Amazon SES 单独向您收取电子邮件消息费用，Amazon SNS 单独向您收取 SMS 消息费用。

1. 选择用于新用户的**用户名**。

1. 选择您是要为用户**创建密码**，还是让 Amazon Cognito **生成密码**。如果用户池中提供[无密码登录](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)，则生成密码的选项不可用。任何临时密码都必须遵守用户池密码策略。

1. 选择**创建**。

1. 选择**用户**菜单，然后选择用户的**用户名**条目。添加和编辑**用户属性**和**组成员资格**。查看**用户事件历史记录**。