此时,由于 AWS 不支持重置 MFA(如果您的用户池需要 MFA - 禁用 MFAAdminSetUserMFAPreference
将返回 200 OK 但它不会执行任何操作),唯一的方法是创建一个具有可选 MFA 的新用户池(您必须创建一个新的,因为一旦创建了用户池,就禁止从required
to更改)。optional
然后使用新的用户池,您必须在代码中手动强制执行 MFA(如果这是您想要的)。
为此,一旦用户成功登录并且返回对象中包含令牌,您必须调用AssociateSoftwareToken
而不是返回令牌并开始 MFA 注册过程。只有当用户成功完成调用时,令牌(如IdToken
)才会返回给用户AdminRespondToAuthChallenge
。
最重要的是,使用可选的 MFA,AdminSetUserMFAPreference
它将起作用。这是在 AWS 上的用户池中重置 MFA 的唯一方法(此时)。
[更新]
并不是说我的原始答案无效,只是为了提供更多信息,这里有一些关于如何使用的额外说明AdminSetUserMFAPreference
:
首先,您需要一个带有可选MFA 的用户池。可选的是这里的关键字。此解决方案不适用于具有所需 MFA 的用户池。
设置用户池后,我假设有一个用户正确注册了您的用户池。这意味着他们可以根据您的用户池对自己进行身份验证,而不会出现任何问题。当然,重点是他们需要在身份验证过程中提供 MFA。但由于我们已经建立,MFA 在您的用户池中是可选的,因此如果您坚持对您的用户强制执行 MFA,这意味着您必须在您的代码中手动执行此操作。
好的,到目前为止,每个人都很高兴。但正如现实一样,悲伤的日子来了。您的用户丢失了他们的 MFA 代码,并且无法生成任何新代码。因此,您希望为他们提供通过重新注册新设备来重置其 MFA 的可能性。当然,首先,您需要确保请求此类内容的是实际用户。我的意思是您不希望任何人(但真正的用户)能够提出这样的请求。因此,您需要先对它们进行身份验证。但他们无法进行身份验证(由于缺少 MFA)这一事实是他们最终来到这里的全部原因。那么你现在能做什么呢?好吧,尽管这部分超出了本文的范围,但作为一个小提示,您可以向他们发送一封包含代码的电子邮件,并要求他们将其作为一次性身份验证机制返回给您。
好的,回到手头的问题。现在,您可以确定请求重置 MFA 的是实际帐户所有者。这就是你的做法:
async function resetMfa(username) {
const cognito = new AWS.CognitoIdentityServiceProvider();
await cognito.adminSetUserMFAPreference({
UserPoolId: "user pool ID",
Username: username,
SoftwareTokenMfaSettings: {
Enabled: false,
}
}).promise();
}
一旦他们的 MFA 被禁用,为了重新注册新设备,帐户所有者必须尝试新的登录。这种尝试就像他们第一次登录他们的帐户一样,他们将被要求注册一个新的 MFA 设备。
我希望这能进一步澄清一些事情。如果您想知道如何(手动)使用 MFA,我有另一个帖子来解决它。