Amazon Cognito
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

多重验证 (MFA) 设置

MFA and verifications 选项卡上,您可以为多重验证 (MFA) 选择设置。

多重验证 (MFA) 通过增加身份验证方法而不是单靠用户名 (或别名) 和密码来提高应用程序的安全性。

可供使用的 MFA 设置如下:

  • Required:所有用户必须使用 MFA。只能在创建用户池时指定此设置。

  • Optional:单个用户可以选择是否为自己的用户账户启用 MFA。

  • Off:对所有用户禁用 MFA。

SMS 文本消息 MFA

如果用户在登录时 MFA 处于开启状态,他或她首先要输入并提交用户名和密码。客户端应用程序将收到 getMFA 响应,指明发送授权代码的位置。客户端应用程序应向用户指明在哪里查找该代码 (如代码被发送到哪个电话号码),提供一个表单用于输入该代码,然后提交代码以完成登录过程。目的地会被屏蔽 (例如,仅显示电话号码的最后 4 位数)。如果一个应用程序正在使用 Amazon Cognito 托管 UI,则它会显示一个页面让用户输入 MFA 代码。

SMA 文本消息授权代码的有效期为 3 分钟。

如果用户无法访问其发送 SMS 文本消息 MFA 代码的设备,则用户必须向客户服务部门寻求帮助。具备必要 AWS 账户权限的管理员可以更改用户的电话号码,但只能通过 AWS Command Line Interface或 API 进行。

当用户成功通过 SMS 文本消息 MFA 流时,其电话号码也会被标记为已验证。

注意

SMS for MFA 是单独收费的。(向电子邮件地址发送验证代码是不收费的。)有关 Amazon SNS 定价的信息,请参阅全球 SMS 定价。有关提供 SMS 消息发送服务的最新国家/地区列表,请参阅支持的区域和国家/地区

重要

要确保为验证电话号码或为 SMS 文本消息 MFA 发送 SMS 消息,您必须请求增加 Amazon SNS 的支出限额。

Amazon Cognito 使用 Amazon SNS 向用户发送 SMS 消息。Amazon SNS 发送 SMS 消息的数量取决于支出限额。您可以为 AWS 账户和单个消息指定支出限额,且该限额仅适用于发送 SMS 消息的费用。

每个账户的默认支出限额 (如果未指定) 为每月 1.00 USD。如果您想提高此限额,请在 AWS 支持中心提交 SNS 限额提高案例。在 New limit value 中,输入所需的每月支出限额。在 Use Case Description 字段中,说明您想请求提高每月的 SMS 支出限额。

TOTP 软件令牌 MFA

当 TOTP 软件令牌 MFA 启用时,在您用户的用户名和密码得到验证后,您的用户会面临质询,要求其使用基于时间的一次性密码 (TOTP) 完成身份验证。如果您的应用程序使用 Amazon Cognito 托管 UI 来登录用户,则当用户提交了其用户名和密码后,该 UI 会显示第二页来让用户输入 TOTP 密码。

您可以通过 Amazon Cognito 托管 UI 或使用 Amazon Cognito API 在 Amazon Cognito 控制台中为用户池启用 TOTP MFA。在用户池级别,您可以通过调用 SetUserPoolMfaConfig 配置 MFA 和启用 TOTP MFA。

注意

如果没有为用户池启用 TOTP 软件令牌 MFA,则用户无法与该令牌关联或使用该令牌验证,用户将收到如下 SoftwareTokenMFANotFoundException 异常消息:“userPool 未启用软件令牌 MFA。”

为您的用户配置 TOTP 是一个多步骤过程,在此过程中,您的用户会收到一个秘密代码,他们通过输入一个一次性密码来验证该代码。接下来,您可以为用户启用 TOTP MFA,或将 TOTP 设置为用户的首选 MFA 方法。

关联 TOTP 令牌

  1. 当您的用户选择 TOTP 软件令牌 MFA 时,调用 AssociateSoftwareToken 来返回为用户账户生成的唯一共享私有密钥代码。对此 API 方法的请求需要访问令牌或会话字符串,但不同时需要两者。为方便起见,您可以将私有密钥作为快速响应 (QR) 代码分发。

  2. 密钥代码或 QR 代码出现在您的应用程序上,您的用户需要将其输入到一个 TOTP 生成应用程序 (如 Google Authenticator) 中。

  3. 您的用户将密钥代码输入到 TOTP 生成应用程序中,以便将新账户与您的客户端应用程序相关联。

验证 TOTP 令牌

  1. 当新的 TOTP 账户与您的应用程序关联后,它将生成一个临时密码。

  2. 您的用户将该临时密码输入您的应用程序,而您的应用程序则通过调用 VerifySoftwareToken 来响应。在 Amazon Cognito 服务服务器上,将生成一个 TOTP 代码,并与用户的临时密码作比较。如果二者匹配,则服务将其标记为已验证。

  3. 如果代码正确,确认所用的时间在范围内,重试次数也未超过最大值。如果您的用户通过了所有步骤,则验证完成。

    或者,如果代码不正确,则验证无法完成,您的用户可以重试或取消。我们建议您的用户同步其 TOTP 生成应用程序的时间。

使用 TOTP MFA 登录

  1. 您的用户输入用户名和密码来登录到您的客户端应用程序。

  2. TOTP MFA 质询被调用,您的应用程序提示用户输入临时密码。

  3. 您的用户从关联的 TOTP 生成应用程序获取临时密码。

  4. 您的用户在您的客户端应用程序中输入 TOTP 代码。您的应用程序通知 Amazon Cognito 服务验证该代码。每次登录时,都应调用 RespondToAuthChallenge,以获取对新的 TOTP 身份验证质询的响应。

  5. 如果令牌通过 Amazon Cognito 验证,则登录成功,您的用户可以继续完成身份验证流程。

删除 TOTP 令牌

  1. 您的应用程序应允许用户删除 TOTP 令牌。

  2. 您的客户端应用程序应要求用户输入其密码。

  3. 如果密码正确,则删除 TOTP 令牌。

    注意

    目前 API 中不支持删除 TOTP 软件令牌操作。计划在未来版本中提供此功能。使用 SetUserMFAPreference 为单独的用户禁用 TOTP MFA。