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

问题描述

我正在使用以下代码,但它不会更改 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 中。

在此处输入图像描述

Update-0:在应用程序级别,它工作正常。当我启用 MFA 时,我得到了代码,当我禁用它时,我没有得到代码。我的问题是 Cognito 亚马逊控制台的 UI 中的 MFA 状态没有改变,如上图所示。

admin-set-user-mfa-preference和 和有什么不一样set-user-mfa-preference

在此处输入图像描述

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

这有什么区别吗?

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

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

标签: javaamazon-web-servicesamazon-cognito

解决方案


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


推荐阅读