AWS Cognito:是否有一种方法可以在身份验证期间切换 MFA 类型?

AWS Cognito: Is there a method to switch MFA type DURING authentication?

我正在通过构建演示来研究 AWS Cognito。现在我可以设置用户 MFA 首选项以启用 SMS 和/或 TOTP,并将其中之一设置为首选 MFA 类型。然后,下次用户验证时,将根据首选 MFA 类型向用户询问 SMS 或 TOTP 验证码。

我的问题是,如果用户想在初始密码验证之后但在 MFA 响应之前切换 MFA 类型怎么办?例如,用户可能在他的 phone 以外的其他设备上拥有 TOTP。用户将 SMS 设置为首选 MFA 类型,但在发送密码并被要求提供 SMS 验证码后意识到,他的 phone 不在身边,但 TOTP 设备可用。用户此时如何切换到TOTP?或者,如果用户偏好是 TOTP 但他想在相同情况下切换到 SMS?叫什么API?

我找不到要从文档中调用的 API 方法。也许这只能通过 lambda 触发器来实现?在我看来,这是一种相当普遍的情况,应该提供一个示例/API 方法。

此致,

Bing

您可以允许用户 select 在 SMS MFATOTP MFA 之间,如果用户设置了两个 MFA,但其中 none 被 select 编辑为首选之一。以下 python 代码执行此操作:

client = boto3.client('cognito-idp')
response = client.set_user_mfa_preference(
SMSMfaSettings={
    'Enabled': True,
    'PreferredMfa': False
},
SoftwareTokenMfaSettings={
    'Enabled': True,
    'PreferredMfa': False
},
AccessToken=accessToken
)

注意:用户必须关联TOTP才能启用TOTPMFA,否则会报错。

在调用用户身份验证功能时设置这些更改后,它将在挑战中为 MFA 提供 select 选项。