TOTP软件令牌 MFA - Amazon Cognito

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

TOTP软件令牌 MFA

当您在用户池MFA中设置TOTP软件令牌时,您的用户使用用户名和密码登录,然后使用完成身份验证。TOTP在您的用户设置并验证用户名和密码后,他们可以为激活TOTP软件令牌。MFA如果您的应用程序使用 Amazon Cognito 托管的用户界面登录用户,则您的用户将提交他们的用户名和密码,然后在其他登录页面上提交TOTP密码。

您可以在 Amazon Cognito 控制台中TOTPMFA为您的用户池激活,也可以使用 Amaz API on Cognito 操作。在用户池级别,您可以调SetUserPoolMfaConfig用配置MFA和启用TOTPMFA。

注意

如果您尚未MFA为用户池激活TOTP软件令牌,Amazon Cognito 将无法使用该令牌关联或验证用户。在这种情况下,用户会收到 SoftwareTokenMFANotFoundException 异常,并带有说明 Software Token MFA has not been enabled by the userPool。如果您稍后停用用户池MFA的软件令牌,则之前关联并验证过TOTP令牌的用户可以继续将其用于MFA。

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

当您将用户池配置为需要TOTPMFA并且您的用户在托管用户界面中注册您的应用程序时,Amazon Cognito 会自动执行用户流程。Amazon Cognito 会提示您的用户选择一种MFA方法,显示用于设置身份验证器应用程序的二维码,并验证他们的注册。MFA在您允许用户在SMS和之间进行选择的用户池中 TOTPMFA,Amazon Cognito 还会为您的用户提供方法选择。有关托管 UI 注册体验的更多信息,请参阅 如何注册新的用户个人资料

重要

当您的 AWS WAF 网站ACL与用户池相关联,并且您的网络中的规则ACL呈现 a 时CAPTCHA,这可能会导致托管用户界面TOTP注册中出现不可恢复的错误。要创建具有CAPTCHA操作且不影响托管界面的规则TOTP,请参阅ACL为托管 UI 配置您的 AWS WAF 网站 TOTP MFA。有关 AWS WAF 网络ACLs和 Amazon Cognito 的更多信息,请参阅。将 AWS WAF Web ACL 与用户池关联

要TOTPMFA在使用 Amazon Cognito 的自定义用户界面中实现API,请参阅在 Amazon Cognito 用户池中MFA为用户进行配置 API

要MFA添加到您的用户池,请参阅MFA添加到用户池

TOTPMFA注意事项和局限性

  1. Amazon Cognito MFA 通过生成代码的身份验证器应用程序支持软件令牌。TOTP亚马逊 Cognito 不支持基于硬件。MFA

  2. 当您的用户池需要未配置TOTP的用户时,您的用户会收到一次性访问令牌,您的应用程序可以使用该令牌TOTPMFA为该用户激活。在您的用户注册了额外的登录因子之前,后续的TOTP登录尝试将失败。

    • 通过SignUpAPI操作或通过托管用户界面在您的用户池中注册的用户将在用户完成注册后获得一次性令牌。

    • 在您创建用户并且用户设置初始密码后,Amazon Cognito 会从托管 UI 向用户颁发一次性令牌。如果您为用户设置了永久密码,则 Amazon Cognito 会在用户首次登录时颁发一次性令牌。

    • Amazon Cognito 不会向使用或操作登录的管理员创建的用户发放一次性令牌。InitiateAuthAdminInitiateAuthAPI在您的用户成功完成设置初始密码的挑战后,或者如果您为用户设置了永久密码,Amazon Cognito 会立即要求用户进行设置。MFA

  3. 如果需要的用户池中的用户MFA已收到一次性访问令牌但尚未设置 TOTPMFA,则该用户在设置完毕之前无法使用托管界面登录MFA。您可以代替访问令牌,而是在请求中使用MFA_SETUP质询InitiateAuthAssociateSoftwareToken请求AdminInitiateAuth中的session响应值。

  4. 如果您的用户已进行设置TOTP,他们可以将其用于MFA,即使您稍后停TOTP用用户池也是如此。

  5. Amazon Cognito TOTPs 仅接受使用哈希函数生成代码的身份验证器应用程序。HMAC SHA1使用 SHA -256 哈希生成的代码会返回错误。Code mismatch

在 Amazon Cognito 用户池中MFA为用户进行配置 API

当用户首次登录时,您的应用程序使用其一次性访问令牌生成TOTP私钥,并以文本或二维码格式将其呈现给您的用户。您的用户配置了他们的身份验证器应用程序,TOTP并为后续的登录尝试提供了。您的应用程序或托管用户界面在MFA质询响应中TOTP向 Amazon Cognito 呈现。

关联TOTP软件令牌

要关联TOTP令牌,请向您的用户发送一个密码,他们必须使用一次性密码进行验证。关联令牌需要执行三个步骤。

  1. 当您的用户选择TOTP软件令牌时MFA,调用AssociateSoftwareToken返回为用户帐户生成的唯一共享密钥代码。您可以使用访问令牌或会话字符串进行授权 AssociateSoftwareToken 。

  2. 您的应用程序向用户呈现私钥或您从私钥生成的二维码。您的用户必须在TOTP生成应用程序(例如 Google 身份验证器)中输入密钥。您可以使用 libqrencode 生成二维码。

  3. 您的用户用身份验证器应用程序(例如 Google Authenticator)输入密钥或扫描二维码,该应用程序开始生成代码。

验证令TOTP牌

接下来,验证令TOTP牌。向您的用户索取示例代码并将其提供给 Amazon Cognito 服务,以确认用户是否成功生成TOTP代码,如下所示。

  1. 您的应用程序会提示用户输入代码,以证明他们已正确设置了身份验证器应用程序。

  2. 用户的身份验证器应用程序显示一个临时密码。身份验证器应用程序根据您提供给用户的密钥生成密码。

  3. 用户输入他们的临时密码。您的应用程序在请求中将临时密码传递给 Amazon Cognito。VerifySoftwareToken API

  4. Amazon Cognito 保留了与用户关联的密钥,并生成了一个TOTP密钥并将其与您的用户提供的密钥进行比较。如果匹配,VerifySoftwareToken 返回 SUCCESS 响应。

  5. Amazon Cognito 将该TOTP因素与用户联系起来。

  6. 如果 VerifySoftwareToken 操作返回 ERROR 响应,请确保用户的时钟正确且没有超过最大重试次数。为了解决轻微的时钟偏TOTP差,Amazon Cognito 接受在尝试之前或之后 30 秒内的令牌。解决问题后,请重试该 VerifySoftwareToken 操作。

使用登录 TOTP MFA

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

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

  2. TOTPMFA挑战被调用,您的应用程序会提示您的用户输入临时密码。

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

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

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

移除代TOTP币

最后,您的应用程序应允许您的用户停用其TOTP配置。目前,您无法删除用户的TOTP软件令牌。要替换用户的软件令牌,请关联并验证新的软件令牌。要TOTPMFA为用户停用,请致电SetUserMFAPreference将您的用户修改为使用 “否MFA” 或 “仅SMSMFA使用”。

  1. 在您的应用程序中为想要重置的用户创建界面MFA。在此界面中提示用户输入密码。

  2. 如果 Amazon Cognito 返回TOTPMFA质询,请使用更新用户的MFA偏好。SetUserMFAPreference

  3. 在您的应用程序中,告知您的用户他们已停用,MFA并提示他们重新登录。

ACL为托管 UI 配置您的 AWS WAF 网站 TOTP MFA

当您的 AWS WAF 网站ACL与用户池相关联,并且您的网络中的规则ACL呈现 a 时CAPTCHA,这可能会导致托管用户界面TOTP注册中出现不可恢复的错误。 AWS WAF CAPTCHA规则仅以这种TOTPMFA方式影响托管界面。SMSMFA不受影响。

当您的CAPTCHA规则不允许用户完成TOTPMFA设置时,Amazon Cognito 会显示以下错误。

由于WAF验证码,不允许请求。

当您的用户池CAPTCHA在后台 AWS WAF 提示回应AssociateSoftwareTokenVerifySoftwareTokenAPI请求时,就会出现此错误。要创建具有CAPTCHA操作且不影响托管界面的规则TOTP,请在规则中将AssociateSoftwareToken和的x-amzn-cognito-operation-name标题值VerifySoftwareToken排除在CAPTCHA操作之外。

以下屏幕截图显示了一个示例 AWS WAF 规则,该规则将CAPTCHA操作应用于x-amzn-cognito-operation-name标头值不为AssociateSoftwareToken或的所有请求VerifySoftwareToken

AWS WAF 规则的屏幕截图,该规则将CAPTCHA操作应用于x-amzn-cognito-operation-name标头值不为AssociateSoftwareToken或的所有请求VerifySoftwareToken。

有关 AWS WAF 网络ACLs和 Amazon Cognito 的更多信息,请参阅。将 AWS WAF Web ACL 与用户池关联