向用户池添加 MFA
MFA 将您具有的某种 身份验证因素添加到您已知的 初始因素(通常是用户名和密码)中。您可以选择将短信文本消息、电子邮件消息或基于时间的一次性密码(TOTP)作为用户登录的额外安全因素。
多重身份验证(MFA)可提高应用程序中本地用户的安全性。对于联合用户,Amazon Cognito 会将所有身份验证过程委托给 IdP,并且不会为他们提供额外的身份验证因素。
注意
新用户首次登录应用程序时,Amazon Cognito 会发出 OAuth 2.0 令牌,即使您的用户池要求使用 MFA 也是如此。您的用户首次登录时的第二个身份验证因素是他们对 Amazon Cognito 发送给他们的验证消息的确认。如果您的用户池要求使用 MFA,Amazon Cognito 会提示您的用户注册一个额外的登录因素,以便在第一次之后的每次登录尝试期间使用。
借助自适应身份验证,可以将用户池配置为响应增加的风险级别需要额外的身份验证因素。要向用户池添加自适应身份验证,请参阅 用户池高级安全特征。
将用户池的 MFA 设置为 required
时,所有用户都必须完成 MFA 才能登录。要登录,每个用户至少设置一个 MFA 安全因素。当您将 MFA 设置为 required
时,您必须在用户登录中包含 MFA 设置,以便您的用户池允许他们登录。
当您将 MFA 设置为必需时,托管 UI 会提示用户设置 MFA。当您在用户池中将 MFA 设置为可选时,托管 UI 不会提示用户。要使用可选的 MFA,您必须在应用程序中构建一个界面,以提示用户选择他们需要设置 MFA,然后引导他们完成 API 输入以验证他们的额外登录因素。
MFA 的注意事项
在设置 MFA 之前,请考虑以下情况:
-
用户首选 MFA 方法会影响他们可用于恢复密码的方法。首选 MFA 方式为电子邮件的用户无法通过电子邮件接收密码重置代码。首选 MFA 方式为短信的用户无法通过短信接收密码重置代码。
当用户不符合条件,无法使用首选密码重置方法时,您的密码恢复设置必须提供替代选项。例如,您的恢复机制可能将电子邮件列为第一优先选项,而电子邮件 MFA 可能是您的用户池中的一个选项。在这种情况下,添加短信消息账户恢复作为第二个选项,或者使用管理 API 操作为这些用户重置密码。
-
当您在用户池中激活 MFA 并选择 SMS 文本消息作为第二安全要素时,您可以向尚未在 Amazon Cognito 中验证的电话号码属性发送短信。用户完成短信 MFA 后,Amazon Cognito 会将其
phone_number_verified
属性设置为true
。 -
在五次尝试提交 MFA 代码均未成功后,Amazon Cognito 会开始如用户池身份验证流程中所描述的指数超时锁定过程。
-
如果您的账户所在的 SMS 沙盒,位于包含用户池的 Amazon Simple Notification Service(Amazon SNS)资源的 Amazon Web Services 区域中,您必须在 Amazon SNS 中验证电话号码,然后才能发送短信。有关更多信息,请参阅 Amazon Cognito 用户池的短信设置。
-
要使用高级安全特征更改用户的 MFA 状态来响应检测到的事件,请激活 MFA 并在 Amazon Cognito 用户池控制台中将其设置为可选。有关更多信息,请参阅 用户池高级安全特征。
-
电子邮件和短信消息要求您的用户分别具有电子邮件地址和电话号码属性。您可以在用户池中将
email
或phone_number
设置为必需的属性。在这种情况下,除非用户提供电话号码,否则他们无法完成注册。如果您未将这些属性设置为必需,但想要进行电子邮件或短信消息 MFA,则可以在用户注册时提示他们输入电子邮件地址或电话号码。妥善的做法是将用户池配置为自动向用户发送消息来验证这些属性。如果用户通过短信或电子邮件成功接收了临时验证码,并在 VerifyUserAttribute API 请求中返回了该验证码,则 Amazon Cognito 会将电话号码或电子邮件地址视为已验证。或者,您的团队可以设置电话号码,并使用执行 AdminUpdateUserAttributes API 请求的管理应用程序将其标记为已验证。
-
如果您已将 MFA 设置为必需且激活了多个身份验证因素,则 Amazon Cognito 会提示新用户选择他们想要使用的 MFA 因素。用户必须有电话号码才能设置短信消息 MFA,必须有电子邮件地址才能设置电子邮件消息 MFA。如果用户没有为任何基于消息的可用 MFA 定义属性,则 Amazon Cognito 会提示他们设置 TOTP MFA。选择 MFA 因素(
SELECT_MFA_TYPE
)的提示,以及设置所选因素(MFA_SETUP
)的提示会作为 InitiateAuth 和 AdminInitiateAuth API 操作的质询响应出现。
用户 MFA 首选项
用户可以设置多个 MFA 因素。只能激活一个因素。您可以在用户池设置中或从用户提示为用户选择有效的 MFA 首选项。当用户池设置和他们自己的用户级设置满足以下条件时,用户池会提示用户输入 MFA 验证码:
-
您可以在用户池中将 MFA 设置为可选或必需。
-
用户具有有效的
email
或phone_number
属性,或者已为 TOTP 设置身份验证器应用程序。 -
至少有一个 MFA 因素处于活动状态。
-
一个 MFA 因素设置为首选。
用户池设置及其对 MFA 选项的影响
用户池的配置会影响用户可以选择的 MFA 方法。以下是一些会影响用户设置 MFA 首选项能力的用户池设置:
-
在 Amazon Cognito 控制台登录体验选项卡中的多重身份验证配置中,您可以将 MFA 设置为可选或必需,也可以将其关闭。此设置的 API 等效项是
CreateUserPool
、UpdateUserPool
和SetUserPoolMfaConfig
的 MfaConfiguration 参数。此外,在多重身份验证配置中,MFA 方法设置决定了用户可以设置的 MFA 因素。此设置的 API 等效项是 SetUserPoolMfaConfig 操作。
在用户账户恢复下的登录体验选项卡中,您可以配置用户池向忘记密码的用户发送消息的方式。用户首选的 MFA 方法不能与用户池中优先级最高的恢复消息发送方法具有相同的传送方式。此设置的 API 等效项是
CreateUserPool
和UpdateUserPool
的 AccountRecoverySetting 参数。例如,当恢复选项为仅使用电子邮件或如果电子邮件可用,则使用电子邮件发送,否则使用短信时,用户不能将电子邮件 MFA 设置为首选。将传送方式更改为仅使用短信或如果短信可用,则使用短信,否则使用电子邮件。
-
如果您只将一种 MFA 方法设置为可用,则无需管理用户 MFA 首选项。
-
激活的短信配置会自动使短信成为用户池中的可用 MFA 方法。
用户池中包含您自己的 Amazon SES 资源的有效电子邮件配置以及有效的高级安全特征,可自动使电子邮件消息成为用户池中的可用 MFA 方法。
-
在用户池中将 MFA 设置为必需时,用户无法启用或禁用任何 MFA 方法。您只能设置首选方法。
-
当您在用户池中将 MFA 设置为可选时,托管 UI 不会提示用户设置 MFA,而是在用户拥有首选 MFA 方法时,提示用户输入 MFA 验证码。
-
当您激活高级安全特征并在完全功能模式下配置自适应身份验证响应时,在您的用户池中 MFA 必须是可选的。自适应身份验证的其中一个响应选项是要求其登录尝试被评估为包含一定风险级别的用户进行 MFA。
控制台的注册体验选项卡中的必填属性设置决定了用户是否必须提供电子邮件地址或电话号码才能注册您的应用程序。当用户具有相应属性时,电子邮件和短信将成为符合条件的 MFA 因素。
CreateUserPool
的 Schema 参数根据需要设置属性。 -
当您在用户池中将 MFA 设置为必填且用户使用托管 UI 登录时,Amazon Cognito 会提示他们从用户池的可用方法中选择 MFA 方法。托管 UI 处理电子邮件地址或电话号码的收集以及 TOTP 的设置。
用于配置 MFA 首选项的 API 操作
您可以在具有访问令牌授权的自助服务模式中为用户配置 MFA 首选项,或者在具有管理 API 操作的管理员管理模式中为用户配置 MFA 首选项。这些操作启用或禁用 MFA 方法,并将多种方法之一设置为首选选项。在用户设置 MFA 首选项后,Amazon Cognito 会在登录时提示他们提供来自他们首选 MFA 方法的验证码。未设置首选项的用户会收到在 SELECT_MFA_TYPE
质询中选择首选方法的提示。
-
在用户自助服务模式或公共应用程序中,使用已登录用户的访问令牌来授权的 SetUserMfaPreference 用于设置 MFA 配置。
-
在管理员管理的应用程序或机密应用程序中,使用管理 Amazon 凭证授权的 AdminSetUserPreference 用于设置 MFA 配置。
您也可以从 Amazon Cognito 控制台的用户选项卡中设置用户 MFA 首选项。有关 Amazon Cognito 用户池 API 中的公共和机密身份验证模式的更多信息,请参阅使用用户池 API 和授权服务器。
为多重身份验证配置用户池
您可以在 Amazon Cognito 控制台中配置 MFA。
在 Amazon Cognito 控制台中配置 MFA
-
选择用户池。
-
从列表中选择一个现有用户池,或创建一个用户池。
-
选择登录体验选项卡。找到多重身份验证,然后选择编辑
-
选择您希望用于用户池的MFA 强制执行方法。
-
需要 MFA。用户池中的所有用户必须使用额外的短信验证码或基于时间的一次性密码(TOTP)因素进行登录。
-
可选 MFA – 您可以为用户提供选项来注册额外的登录安全要素,但仍允许未配置 MFA 的用户登录。如果您使用自适应身份验证,请选择此选项。有关自适应身份验证的更多信息,请参阅用户池高级安全特征。
-
无 MFA。您的用户无法注册其他登录安全要素。
-
-
选择您在应用程序中支持的 MFA 方法。您可以将电子邮件消息、短信或 TOTP 生成的身份验证器应用程序设置为第二个因素。
-
如果使用 SMS 文本消息作为第二安全要素,并且没有配置 IAM 角色与 Amazon Simple Notification Service(Amazon SNS)一起使用 SMS 消息,您可以在控制台中创建一个角色。在用户池的消息收发选项卡下,找到 SMS 并选择编辑。您还可以使用允许 Amazon Cognito 代表您向用户发送短信的现有角色。有关更多信息,请参阅 IAM 角色。
-
选择 Save changes(保存更改)。