You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用adminSetUserMFAPreference开启Cognito用户SOFTWARE_TOKEN_MFA报错

解决Cognito adminSetUserMFAPreference启用OTP MFA报错问题

错误原因

报错User does not have delivery config set to turn on SOFTWARE_TOKEN_MFA的核心原因是:目标用户尚未完成软件令牌MFA的设备关联流程——即没有生成并验证TOTP(基于时间的一次性密码)设备,直接调用adminSetUserMFAPreference启用OTP MFA会触发此错误。

解决步骤

必须先完成用户的TOTP设备关联,再启用MFA偏好,具体步骤如下:

  1. 生成TOTP设备密钥
    调用adminAssociateSoftwareToken接口,为用户生成用于绑定OTP认证APP(如Google Authenticator)的密钥:

    const associateInput = {
      Username: response.User.Username,
      UserPoolId: environment.awsUserPoolConfig.userPoolId
    };
    const associateResp = await COGNITO_CLIENT.adminAssociateSoftwareToken(associateInput).promise();
    // associateResp.SecretCode 即为TOTP密钥,可生成二维码供用户扫码绑定
    
  2. 验证TOTP设备
    让用户在OTP APP中输入生成的6位验证码,调用adminVerifySoftwareToken完成设备验证:

    const verifyInput = {
      Username: response.User.Username,
      UserPoolId: environment.awsUserPoolConfig.userPoolId,
      UserCode: '用户输入的6位验证码',
      FriendlyDeviceName: '自定义设备名称(可选)'
    };
    await COGNITO_CLIENT.adminVerifySoftwareToken(verifyInput).promise();
    
  3. 启用并设置首选MFA
    完成设备关联后,再执行你原有的adminSetUserMFAPreference代码即可成功:

    let input = {
      Username: response.User.Username,
      UserPoolId: environment.awsUserPoolConfig.userPoolId,
      SoftwareTokenMfaSettings: {
        Enabled: true,
        PreferredMfa: true,
      },
    };
    await COGNITO_CLIENT.adminSetUserMFAPreference(input).promise();
    

补充说明

  • 如果是用户自助设置MFA,可引导用户通过Cognito托管UI或自定义前端流程完成TOTP设备绑定,再启用MFA;
  • 管理员批量操作时,需确保每个用户都先完成TOTP设备的生成与验证步骤,再设置MFA偏好。

内容的提问来源于stack exchange,提问作者Mohamed Anser Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 00:45:34