如何获取Amazon Cognito托管UI提示输入TOTP?

Zac*_*ach 5 amazon-web-services amazon-cognito

我假设会根据文档提示我,该文档特别指出:

如果您的应用程序使用Amazon Cognito托管的UI登录用户,则该UI将显示第二页,供您的用户在提交用户名和密码后输入TOTP密码。

在用户池的“ MFA和验证”部分下,我检查了以下内容:

  • 您要启用多重身份验证(MFA)吗?
    • 可选的
  • 您要启用哪些第二因素?
    • 基于时间的一次性密码

我添加了一个已验证的测试用户。

从那里开始,我按照文档进行操作,以关联TOTP令牌验证TOTP令牌,确认我在响应中获得了用于调用AssociateSoftwareToken的密码,在响应中获得了对VerifySoftwareToken的响应“ SUCCESS”。

在这一点上,我相信在使用托管的UI登录页面时,应在提交用户名/密码后提示我输入一次性密码,并在成功验证后将其重定向到登录回调URL。在我的应用客户端中指定。

但是,提交用户名和密码后,我将立即被重定向,并且没有提示输入TOTP的提示。

Zac*_*ach 6

在为测试帐户设置TOTP后,我能够通过显式调用SetUserMFAPreference来使其工作。我认为关联和验证 TOTP 会自动改变 Cognito 在用户身份验证流程方面的行为是错误的。它还要求我告诉 Cognito 为用户启用和使用 TOTP。

我最初的困惑的症结在于,生成和关联软件令牌来为用户生成 OTP 并没有为用户启用它。SetUserMFAPreference还需要调用 来为用户启用它。完成后,它按预期工作。例如,要启用软件 MFA 并将其设置为首选:

{
   "AccessToken": "xyz123",
   "SoftwareTokenMfaSettings": { 
      "Enabled": true,
      "PreferredMfa": true
   }
}
Run Code Online (Sandbox Code Playgroud)

还有一个管理版本的 API 调用可以达到相同的结果。