TOTP 软件令牌 MFA - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

TOTP 软件令牌 MFA

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

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

注意

如果未为用户池启用 TOTP 软件令牌 MFA,则用户无法与此令牌关联或验证此令牌。他们收到了这个SoftwareTokenMFANotFoundException异常:“userPool 尚未启用软件令牌 MFA。” 如果稍后为用户池禁用了软件令牌 MFA,以前已关联并验证了 TOTP 令牌的用户可以继续将其用于 MFA。

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

要向用户池添加 MFA,请参阅向用户池添加多重验证 (MFA)

关联 TOTP 令牌

TOTP 令牌关联涉及向您的用户发送一个秘密代码,他们必须使用一次性密码验证该代码。此部分有三个步骤。

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

    注意

    调用 AssociateSoftwareToken 会立即解除现有软件令牌与用户帐户的关联。如果用户随后没有验证软件令牌,则他们的帐户基本上设置为在没有 MFA 的情况下进行身份验证。如果在用户池级别将 MFA 配置设置为可选,则用户可以在没有 MFA 的情况下登录。但是,如果用户池的 MFA 设置为 “必需”,则系统会要求用户在登录时设置新的软件令牌 MFA。

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

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

验证 TOTP 令牌

下一步是验证 TOTP 令牌。过程概述。

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

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

  3. 如果代码正确,确认所用的时间在范围内,重试次数也未超过最大值。Amazon Cognito 还接受提前或延迟一个 30 秒时段以解决时钟偏差的 TOTP 令牌。如果您的用户通过了所有步骤,则验证完成。

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

使用 TOTP MFA 登录

此时,您的用户使用基于时间的一次性密码登录。过程如下所述。

  1. 用户将输入其用户名和密码来登录客户端应用程序。

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

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

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

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

删除 TOTP 令牌

最后,您的应用程序应允许用户删除 TOTP 令牌:

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

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

    注意

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