如何以编程方式为 Java 中的 AWS Cognito 用户池中的已登录用户启用或禁用 MFA?

2023-11-27

我正在使用以下代码,但它不会更改 AWS 中的任何内容,尽管它不会返回文档中所述的任何内容。https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html

public boolean changeMfaStatus(String username, Boolean status) {
    final SMSMfaSettingsType smsMfaSettings = SMSMfaSettingsType.builder()
            .preferredMfa(true)
            .enabled(true)
            .build();
    final AdminSetUserMfaPreferenceRequest setUserMFAPreferenceRequest = AdminSetUserMfaPreferenceRequest.builder()
            .userPoolId(userPoolID)
            .smsMfaSettings(smsMfaSettings)
            .username(username)
            .build();
    LOG.warn(setUserMFAPreferenceRequest);
    try {
        cognitoClient.adminSetUserMFAPreference(setUserMFAPreferenceRequest);
    } catch (Exception e) {
        LOG.warn(e);
        return false;
    }
    return true;
}

更新:实际上,此代码更改了 SMS MFA 状态,但在 Cognito 用户池的 UI 中看不到这些更改。 正如同样的事情来自aws-cli也会更改状态,但不在 UI 中。

enter image description here

更新0: 在应用程序层面,它运行良好。当我启用 MFA 时,我得到了代码,当我禁用它时,我没有得到代码。我的问题是 Cognito Amazon 控制台的 UI 中的 MFA 状态没有变化,如上图所示。

有什么区别admin-set-user-mfa-preference and set-user-mfa-preference?

enter image description here

set-user-mfa-preference需要强制使用 token,如下图所示。 但在代码中,我使用了admin-set-user-mfa-preference

这有什么区别吗?

实际上,无论您启用/禁用 SMS MFA 状态,都没有关系。 它根据从应用程序级别发送的状态进行工作。

但我担心的是 ->UI 操作不工作可以吗?


简单的解决方案是以编程方式启用或禁用 MFA,因为我们知道 SMS MFA 的状态不会使用代码更改,因此您可以在用户池上创建自定义状态字段,并根据代码结果更改该字段的值,例如,如果代码启用 MFA,则将字段值更改为已启用,如果代码禁用 MFA,则将字段值更改为禁用,并且如果在后端您需要 MFA 的状态,那么您可以从您创建的自定义字段中获取值,并根据以下内容维护字段值你的代码......对我来说它是救星。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式为 Java 中的 AWS Cognito 用户池中的已登录用户启用或禁用 MFA? 的相关文章

随机推荐