

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

# 配置 MFA、身份验证、验证和邀请消息
<a name="cognito-user-pool-settings-message-customizations"></a>

借助 Amazon Cognito，您可以自定义短信和电子邮件身份验证、验证以及用户邀请消息，从而增强应用程序的安全性和用户体验。对于某些消息，您可以在基于代码的验证或一键式链接验证之间进行选择。本主题讨论如何在 Amazon Cognito 控制台中对身份验证和验证通信进行个性化设置。

在**消息模板**菜单中，您可以自定义：
+ 用于一次性密码（OTP）和多重（MFA）身份验证的电子邮件和短信模板
+ 您的 SMS 和电子邮件验证消息
+ 电子邮件的验证类型–代码或链接
**注意**  
当用户注册或重新发送确认码时，Amazon Cognito 会在验证消息中发送包含您的基于链接的模板的链接。来自属性更新和密码重置操作的电子邮件使用代码模板。
+ 您的用户邀请消息
+ 流经用户池的电子邮件的 FROM 和 REPLY-TO 电子邮件地址

**注意**  
只有在选择要求进行电话号码和电子邮件验证后，才会显示短信和电子邮件验证消息模板。同样，只有 MFA 设置为 **required**（必填）或 **optional**（可选）时，才会显示 SMS MFA 消息模板。

**Topics**
+ [消息模板](#cognito-user-pool-settings-message-templates)
+ [自定义电子邮件和短信 MFA 消息](#cognito-user-pool-settings-SMS-message-customization)
+ [自定义电子邮件验证消息](#cognito-user-pool-settings-email-verification-message-customization)
+ [自定义用户邀请消息](#cognito-user-pool-settings-user-invitation-message-customization)
+ [自定义您的电子邮件地址](#cognito-user-pool-settings-email-address-customization)
+ [授权 Amazon Cognito 代表您发送 Amazon SES 电子邮件（通过自定义 FROM 电子邮件地址）](#cognito-user-pool-settings-ses-authorization-to-send-email)

## 消息模板
<a name="cognito-user-pool-settings-message-templates"></a>

您可以使用消息模板，在消息中插入占位符。Amazon Cognito 使用相应的值替换占位符。您可以在任何类型的消息模板中引用*通用模板占位符*，但并非所有消息类型中都会出现这些值。


**通用模板占位符**  

|  说明  |  令牌  | 消息类型 | 
| --- | --- | --- | 
| 验证代码 | \$1\$1\$1\$1\$1\$1 | 验证、确认和 MFA 消息 | 
| 临时密码 | \$1\$1\$1\$1\$1\$1 | 忘记密码和邀请消息 | 
| 用户名 | \$1username\$1 | 邀请和高级安全消息 | 

其中一个具有[威胁防护](cognito-user-pool-settings-threat-protection.md)的可用自动响应是通知用户，Amazon Cognito 检测到潜在恶意活动。您可以使用高级安全模板占位符执行以下操作：
+ 包括某个事件的特定详细信息，例如 IP 地址、城市、国家/地区、登录时间、设备名称。Amazon Cognito 威胁防护可以分析这些详细信息。
+ 验证一键式链接是否有效。
+ 使用事件 ID、反馈令牌和用户名构建您自己的一键式链接。

**注意**  
要生成一键式链接并在高级安全电子邮件模板中使用 `{one-click-link-valid}` 和 `{one-click-link-invalid}` 占位符，您必须已经为用户池配置了域。

威胁防护功能可添加以下占位符，您可以将其插入到消息模板中。这些占位符适用于**自适应身份验证消息**，即 Amazon Cognito 向已对其会话进行风险级别评估的用户发送的通知。要使用这些变量配置消息模板，请在 Amazon Cognito 控制台中更新威胁防护的**全功能**配置，或者在请求中[SetRiskConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html)提交模板。


**高级安全模板占位符**  

|  说明  |  令牌  | 
| --- | --- | 
| IP 地址 | \$1ip-address\$1 | 
| 城市 | \$1city\$1 | 
| 国家/地区 | \$1country\$1 | 
| 登录时间 | \$1login-time\$1 | 
| 设备名称 | \$1device-name\$1 | 
| 一键式链接有效 | \$1one-click-link-valid\$1 | 
| 一键式链接无效 | \$1one-click-link-invalid\$1 | 
| 事件 ID | \$1event-id\$1 | 
| 反馈令牌 | \$1feedback-token\$1 | 

## 自定义电子邮件和短信 MFA 消息
<a name="cognito-user-pool-settings-SMS-message-customization"></a>

要自定义用于[多重身份验证（MFA）](user-pool-settings-mfa.md)的短信和电子邮件，请从 Amazon Cognito 用户池控制台的**消息模板**菜单编辑 **MFA 消息**。

**重要**  
您的自定义消息必须包含 `{####}` 占位符。该占位符会在消息发送之前替换为身份验证代码。

Amazon Cognito 设置的短信（包括验证码）的最大长度为 140 个 UTF-8 字符。

### 自定义 SMS 验证消息
<a name="cognito-user-pool-settings-SMS-verification-message-customization"></a>

要自定义用于电话号码验证的短信，请从用户池的**消息模板**菜单编辑**验证消息**模板。

**重要**  
您的自定义消息必须包含 `{####}` 占位符。该占位符会在消息发送之前替换为验证代码。

消息的最大长度为 140 个 UTF-8 字符，其中包括验证代码。

## 自定义电子邮件验证消息
<a name="cognito-user-pool-settings-email-verification-message-customization"></a>

要使用 Amazon Cognito 验证用户池中用户的电子邮件地址，您可以向用户发送一封电子邮件，其中包含用户可以点击的链接或可以输入的代码。

要自定义用于电子邮件地址验证消息的电子邮件主题和消息内容，请从用户池的**消息模板**菜单编辑**验证消息**模板。在编辑**验证消息**模板时，您可以选择**验证类型**，即**代码**或**链接**。

当您选择**代码**作为验证类型时，您的自定义消息必须包含 `{####}` 占位符。发送消息时，验证代码会替换占位符。

当您选择**链接**作为验证类型时，您的自定义消息必须包含格式为 `{##Verify Your Email##}` 的占位符。您可以更改占位符之间的文本字符串，例如 `{##Click here##}`。标题为 *Verify Your Email*（验证您的电子邮件）的验证链接将替换此占位符。

电子邮件验证消息的链接将您的用户定向到类似于以下示例的 URL。

```
https://<your user pool domain>/confirmUser/?client_id=abcdefg12345678&user_name=emailtest&confirmation_code=123456
```

消息的最大长度为 20000 个 UTF-8 字符，其中包括验证代码（如果有）。您可以在此消息中使用 HTML 标签来格式化内容。

## 自定义用户邀请消息
<a name="cognito-user-pool-settings-user-invitation-message-customization"></a>

您可以通过从**消息模板**菜单编辑**邀请消息**模板，来自定义 Amazon Cognito 通过短信或电子邮件发送给新用户的用户邀请消息。

**重要**  
您的自定义消息必须包含 `{username}` 和 `{####}` 占位符。当 Amazon Cognito 发送邀请消息时，它会将这些占位符替换为您用户的用户名和密码。

SMS 消息的最大长度为 140 个 UTF-8 字符，其中包括验证代码。电子邮件的最大长度为 20000 个 UTF-8 字符，其中包括验证代码。您可以在电子邮件中使用 HTML 标签来格式化内容。

## 自定义您的电子邮件地址
<a name="cognito-user-pool-settings-email-address-customization"></a>

默认情况下，Amazon Cognito 通过 **no-reply@verificationemail.com** 向用户池中的用户发送电子邮件。您可以选择指定自定义 FROM 和 REPLY-TO 电子邮件地址来代替 **no-reply@verificationemail.com**。

**自定义 FROM 和 REPLY-TO 电子邮件地址**

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

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

1. 选择**身份验证方法**菜单。在 **Email**（电子邮件）下，选择 **Edit**（编辑）。

1. 选择 **SES Region**（SES 区域）。

1. 从在您所选 **SES Region**（SES 区域）中已经过 Amazon SES 验证的电子邮件地址列表中，选择 **FROM email address**（发件人电子邮件地址）。要使用来自经过验证的域名的电子邮件地址，请在 AWS Command Line Interface 或 AWS API 中配置电子邮件设置。有关更多信息，请参阅《Amazon Simple Email Service 开发人员指南》**中的[在 Amazon SES 中验证电子邮件地址和域](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-addresses-and-domains.html)。

1. 从您所选 **SES Region**（SES 区域）中配置集的列表中，选择 **Configuration set**（配置集）。

1. 为您的电子邮件消息输入易记且格式为 `John Stiles <johnstiles@example.com>` 的 **FROM sender name**（FROM 发件人名称）。

1. 要自定义 REPLY-TO 电子邮件地址，请在 **REPLY-TO email address**（REPLY-TO 电子邮件地址）字段中输入有效的电子邮件地址。

## 授权 Amazon Cognito 代表您发送 Amazon SES 电子邮件（通过自定义 FROM 电子邮件地址）
<a name="cognito-user-pool-settings-ses-authorization-to-send-email"></a>

您可以将 Amazon Cognito 配置为从自定义 FROM 电子邮件地址而不是默认地址发送电子邮件。要使用自定义地址，您必须授予 Amazon Cognito 权限，才能从经过 Amazon SES 验证的身份发送电子邮件。大多数情况下，您可以创建发送授权策略来授予权限。有关更多信息，请参阅《Amazon Simple Email Service 开发人员指南》**中的[使用 Amazon SES 的发送授权](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html)。

当您将用户池配置为使用 Amazon SES 处理电子邮件时，Amazon Cognito 会在您的账户中创建 `AWSServiceRoleForAmazonCognitoIdpEmailService` 角色来授予对 Amazon SES 的访问权限。使用 `AWSServiceRoleForAmazonCognitoIdpEmailService` 服务相关角色时无需发送授权策略。只需在用户池中使用默认电子邮件功能*和*经过验证的 Amazon SES 身份作为 FROM 地址时，才需要添加发送授权策略。

有关 Amazon Cognito 创建的服务相关角色的更多信息，请参阅[对 Amazon Cognito 使用服务相关角色](using-service-linked-roles.md)。

以下示例发送授权策略授予 Amazon Cognito 使用经 Amazon SES 验证的身份的有限能力。Amazon Cognito 在代表 `aws:SourceArn` 中的用户池和 `aws:SourceAccount` 条件中的账户时才能发送电子邮件。有关更多示例，请参阅《Amazon Simple Email Service 开发人员指南》**中的 [Amazon SES 发送授权策略示例](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policy-examples.html)。

**注意**  
在此示例中，“Sid”值为唯一标识语句的任意字符串。有关策略语法的更多信息，请参阅《Amazon Simple Email Service 开发人员指南》**中的 [Amazon SES 发送授权策略](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policies.html)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "stmnt1234567891234",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "email.cognito-idp.amazonaws.com"
                ]
            },
            "Action": [
                "SES:SendEmail",
                "SES:SendRawEmail"
            ],
            "Resource": "arn:aws:ses:us-east-1:111122223333:identity/support@example.com",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:cognito-idp:us-east-1:111122223333:userpool/us-east-1_EXAMPLE"
                }
            }
        }
    ]
}
```

------

当您从下拉菜单中选择 Amazon SES 身份时，Amazon Cognito 控制台会为您添加相似策略。如果您使用 CLI 或 API 配置用户池，则必须将与前例结构相同的策略附加到您的 Amazon SES 身份。