java - 如何以编程方式为 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 的操作不起作用可以吗?
解决方案
简单的解决方案是通过编程方式启用或禁用 MFA,因为我们知道 SMS MFA 的状态不会使用代码更改,因此您可以在用户池上创建自定义状态字段并根据代码结果更改该字段的值,例如,如果代码启用 MFA 将字段值更改为已启用,并且如果代码禁用 MFA 将字段值更改为禁用,并且如果在后端您需要 MFA 的状态,那么您可以从您创建的自定义字段中获取值并根据你的代码....对我来说这是救命稻草。
推荐阅读
- nstextview - NSTextView -> cacheDisplay 丢失了一些下划线,但没有其他下划线
- git - git-p4 在哪里保存有关 perforce depot 的信息
- vercel - Zeit/Now - 在不更改链接的情况下更新现有部署 - 有可能吗?
- sql - 没有公共键的 SQL 连接
- influxdb - 在influxDB中获取给定时间最后存储的值
- ios - 隐私/安全启动画面 - 检测系统警报并避免在这些情况下显示隐私屏幕
- phpstorm - 格式化 Smarty 模板时禁用 PhpStorm 中的硬换行
- python - 从文件中的数据组成的列表中删除字符
- c# - 显示Datagridview动态创建的chechboxvalue?C#
- python-3.x - /login/ 类型对象 'super' 的 AttributeError 没有属性 'save'