

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

# 配置用户创建策略
<a name="user-pool-settings-admin-create-user-policy"></a>

您的用户池可以允许用户注册，您也可以以管理员身份创建用户。您还可以控制注册后的验证和确认过程由用户掌控的程度。例如，您可能需要审查注册并根据外部验证流程接受注册。此配置，或*管理员创建用户策略*，还可设置用户无法再确认其用户账户之前的时间长度。

作为软件的客户身份和访问管理（CIAM）平台，Amazon Cognito 可以满足公众客户的需求。接受注册并拥有应用程序客户端的用户池，无论有没有托管登录，都可以为互联网上知道您的可公开发现的应用程序客户端 ID 并请求注册的任何人创建用户配置文件。注册的用户配置文件可接收访问和身份令牌，还可以访问您为应用程序授权的资源。在用户池中激活注册之前，请查看您的选项并确保配置符合您的安全标准。请按照以下步骤所述，谨慎设置**启用自行注册**和 `AllowAdminCreateUserOnly`。

------
#### [ Amazon Web Services 管理控制台 ]

用户池的**注册**菜单包含在用户池中注册和以管理员身份创建用户的一些设置。

**配置注册体验**

1. 在 **Cognito 辅助验证和确认**中，选择是否**允许 Cognito 自动发送消息以进行验证和确认**。启用此设置后，Amazon Cognito 会向新用户发送电子邮件或短信，其中包含他们必须向您的用户池出示的代码。这将确认他们对电子邮件地址或电话号码的所有权，将等效属性设置为已验证，并确认用于登录的用户账户。您选择的**要验证的属性**将决定验证消息的传送方式和目的地。

1. 在创建用户时，**验证属性更改**并不重要，但与属性验证有关。可以允许已更改但尚未验证其[登录属性的](user-pool-settings-attributes.md#user-pool-settings-aliases.title)用户继续使用其新属性值或原始属性值登录。有关更多信息，请参阅 [当用户更改其电子邮件或电话号码时应进行验证](signing-up-users-in-your-app.md#verifying-when-users-change-their-email-or-phone-number)。

1. **必填属性**显示用户注册或您创建用户之前必须为其提供值的属性。只能在创建用户池时设置必需属性。

1. **自定义属性**对用户创建和注册过程很重要，因为只有在首次创建用户时才能为*不可变的*自定义属性设置值。有关自定义属性的更多信息，请参阅[自定义属性](user-pool-settings-attributes.md#user-pool-settings-custom-attributes)。

1. 如果您希望用户能够使用[未经身份验证的](https://docs.amazonaws.cn/cognito/latest/developerguide/user-pools-API-operations.html#user-pool-apis-auth-unauth) `SignUp` API 生成新账户，请在**自助注册**中选择**启用自行注册**。如果您禁用自助注册，则只能在 Amazon Cognito 控制台中或通过 API 请求[AdminCreateUser](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html)以管理员身份创建新用户。在自助注册处于非活动状态的用户池中，[SignUp](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)API 请求会返回`NotAuthorizedException`，托管登录不会显示**注册**链接。

对于您计划以管理员身份创建用户的用户池，可以在**身份验证方法**菜单中**管理员设置的临时密码到期时间**下的设置中配置临时密码的持续时间。

以管理员身份创建用户的另一个重要元素是邀请消息。创建新用户时，Amazon Cognito 会给他们发送一条包含您的应用程序链接的消息，以便他们可以首次登录。可以在**身份验证方法**菜单中的**消息模板**下自定义这个消息模板。

您可以使用客户端密钥配置[机密应用程序客户端](user-pool-settings-client-apps.md#user-pool-settings-client-app-client-types.title)（通常是 Web 应用程序），以防止在没有应用程序客户端密钥的情况下注册。作为安全最佳实践，请勿在公共应用程序客户端（通常是移动应用程序）中分发应用程序客户端密钥。您可以在 Amazon Cognito 控制台的**应用程序客户端**菜单中使用客户端密钥创建应用程序客户端。

------
#### [ Amazon Cognito user pools API ]

您可以通过编程方式在[CreateUserPool](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)或 [UpdateUserPool](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API 请求中设置用于在用户池中创建用户的参数。

该[AdminCreateUserConfig](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-AdminCreateUserConfig)元素为用户池的以下属性设置值。

1. 启用自助注册

1. 向管理员创建的新用户发送的邀请消息

如果将以下示例添加到完整的 API 请求正文中，可设置一个用户池（自助注册为非活动状态）和一封基本的邀请电子邮件。

```
"AdminCreateUserConfig": { 
      "AllowAdminCreateUserOnly": true,
      "InviteMessageTemplate": { 
         "EmailMessage": "Your username is {username} and temporary password is {####}.",
         "EmailSubject": "Welcome to ExampleApp",
         "SMSMessage": "Your username is {username} and temporary password is {####}."
      }
   }
```

[CreateUserPool](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)或 [UpdateUserPool](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API 请求的以下附加参数控制新用户的创建。

[AutoVerifiedAttributes](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-AutoVerifiedAttributes)  
注册新用户时要[自动向其发送消息的](user-pool-settings-email-phone-verification.md#user-pool-settings-email-phone-verification.title)属性、电子邮件地址或电话号码。

[策略](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Policies)  
用户池[密码策略](managing-users-passwords.md#user-pool-settings-policies.title)。

[架构](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema)  
用户池[自定义属性](user-pool-settings-attributes.md#user-pool-settings-custom-attributes.title)。它们对用户的创建和注册过程很重要，因为只有在首次创建用户时才能为*不可变的*自定义属性设置值。  
此参数还将为您的用户池设置必填属性。如果将以下文本插入到完整 API 请求正文的 `Schema` 元素中，将把 `email` 属性设为必填属性。  

```
{
            "Name": "email",
            "Required": true
}
```

------