AWS Amplify/Cognito-一种仅在用户首次登录时设置 TOTP MFA 的方法

问题描述

我正在设置一个身份验证,其中 MFA 不是可选的,这意味着从注册后的第一次登录尝试开始,用户将被要求设置 MFA(在这种情况下,我将使用基于时间的一次性密码,或TOPT)。为此,我可以看到以下步骤是合理的:

1)通过登录表单获取用户信息 - Auth.signUp()

2) 根据步骤 1) 中检索到的用户数据确定是否已经为用户设置了基于 TOPT 的 MFA。如果不是,请转到第 3) 步,否则转到第 4) 步

3)如果未设置 TOPT,则重定向到将生成 QRCode 的表单以设置此 MFA 功能。验证代码后,登录用户。

4)如果设置了TOPT,则要求输入密码。验证后,登录用户。

我的困境:似乎我无法获取步骤 2) 中的信息,即是否已经为用户设置了基于 TOPT 的 MFA,而用户尚未经过身份验证。在第 1 步中通过 challengeName 在有效负载中检索到的标志 Auth.signUp() 仅提供有关是否启用 MFA 的信息('MFA_SETUP'),而不提供基于 TOTP 的 MFA 是否已设置的信息已经起来了为此,方法 Auth.getPreferredMFA() 可以发挥作用,但它仅在传递给它的用户对象代表经过身份验证(或已登录)的用户时才有效。有没有办法确定是否为尝试登录(但尚未登录)的用户设置了 TOTP MFA?

此外,欢迎使用任何其他解决方案来解决此问题。肯定有人遇到过和我一样的情况,从第一次登录开始就强制执行 MFA。

解决方法

我面临同样的问题。如果需要 MFA,我会打开一个模式来显示二维码并为用户设置 mfa。

代码:“NotAuthorizedException” 消息:“用户会话无效。” 名称:“NotAuthorizedException”

但由于用户尚未登录并创建任何访问令牌而收到此错误。

我解决这个问题的想法实际上是让用户登录,但让他们的权限不超过 SetupMFA 屏幕,这样他们只有在完成设置后才能获得一些权限。

你自己有进步吗?我想听听任何解决方案。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...