AdminGetUserResponse 的 UserMFASettingList 字段为空

UserMFASettingList field of AdminGetUserResponse is empty

提问人:Danilo Arcidiacono 提问时间:10/13/2023 更新时间:10/18/2023 访问量:290

问:

我需要通过 SDK 确定特定 Cognito 用户的 MFA 配置。

我目前的逻辑是基于 API,特别是 和 响应字段。AdminGetUseruserMFASettingListpreferredMfaSetting

根据 https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-cognito-identity-provider/modules/admingetuserresponse.html#usermfasettinglist,定义为userMFASettingList

为用户激活的 MFA 选项。此列表中的可能值为 SMS_MFA 和 SOFTWARE_TOKEN_MFA。

while 被标记为已弃用,不鼓励使用。mfaOptions

我测试了一个具有强制 SMS MFA 的池,但该池是空的,尽管能够完成 MFA 质询并通过 Cognito 托管 UI 成功登录。userMFASettingList

Empty userMFASettingList

Mandatory MFA on pool settings

这是一个错误吗?我应该使用什么逻辑?

amazon-web-services amazon-cognito 多重验证

评论


答:

2赞 Ermiya Eskandary 10/18/2023 #1

这是一个错误吗?

好像是这样。

除非至少调用一次 AdminSetUserMFAPreference,否则默认情况下,在 AdminGetUser 调用中,UserMFASettingList 将始终为空,即使已正确填充也是如此。MFAOptions

这在 API 级别不会返回/为空,因此 SDK 在这里没有区别。

  1. 创建用户
  2. 完成 MFA 的设置
  3. 请注意,控制台显示“MFA 方法:SMS”
  4. 调用并检查填充时是否为空AdminGetUserUserMFASettingListMFAOptions
  5. 调用“重新断言”SMS MFA 选项AdminSetUserMFAPreference
  6. 再次致电并检查两者现在是否已填充,即使您实际上没有更改任何内容AdminGetUserUserMFASettingListMFAOptions
➜  ~ aws cognito-idp admin-get-user \
     --region eu-west-1 \
     --user-pool-id xxx \
     --username user1 \
     | jq .

{
  "Username": "user1",
  "UserAttributes": [
    ...
  ],
  "UserCreateDate": "xxx",
  "UserLastModifiedDate": "xxx",
  "Enabled": true,
  "UserStatus": "CONFIRMED",
  "MFAOptions": [
    {
      "DeliveryMedium": "SMS",
      "AttributeName": "phone_number"
    }
  ]
}

➜  ~ aws cognito-idp admin-set-user-mfa-preference \
    --user-pool-id xxx \
    --username user1 \
    --sms-mfa-settings Enabled=true

➜  ~ aws cognito-idp admin-get-user \
     --region eu-west-1 \
     --user-pool-id xxx \
     --username user1 \
     | jq .

{
  "Username": "user1",
  "UserAttributes": [
    ...
  ],
  "UserCreateDate": "xxx",
  "UserLastModifiedDate": "xxx",
  "Enabled": true,
  "UserStatus": "CONFIRMED",
  "MFAOptions": [
    {
      "DeliveryMedium": "SMS",
      "AttributeName": "phone_number"
    }
  ],
  "UserMFASettingList": [
    "SMS_MFA"
  ]
}

我需要通过 SDK 确定特定 Cognito 用户的 MFA 配置。

我应该使用什么逻辑?

可悲的是,你不能轻易做到。

您需要 & 的组合才能确定用户的 MFA 配置。修复了上述错误(据我所知),即使第一次正确填充,也只是用户可用的 MFA 选项列表。这不是用户选择的。PreferredMfaSettingUserMFASettingListUserMFASettingList

Cognito API 没有返回的字段。CurrentMfaSetting