Javascript 通过Python Boto3为cognito用户启用软件\u令牌\u MFA

Javascript 通过Python Boto3为cognito用户启用软件\u令牌\u MFA,javascript,amazon-web-services,boto3,amazon-cognito,chalice,Javascript,Amazon Web Services,Boto3,Amazon Cognito,Chalice,我需要根据Cognito用户的需求为他们启用MFA。我尝试了SMS MFA&它工作得很好,但是当涉及到软件MFA时,我找不到任何关于如何通过代码启用它的适当文档或示例。通过Javascript或python(Boto3) 上面提到的图片表示我对Cognito用户池的MFA设置。我尝试了一些javascript示例,但有些函数抛出了错误 cognitoUser.authenticateUser(authenticationDetails, { onSuccess: function(r

我需要根据Cognito用户的需求为他们启用MFA。我尝试了SMS MFA&它工作得很好,但是当涉及到软件MFA时,我找不到任何关于如何通过代码启用它的适当文档或示例。通过Javascript或python(Boto3)

上面提到的图片表示我对Cognito用户池的MFA设置。我尝试了一些javascript示例,但有些函数抛出了错误


cognitoUser.authenticateUser(authenticationDetails, {
    onSuccess: function(result) {
        var accessToken = result.getAccessToken().getJwtToken();
    },

    onFailure: function(err) {
        alert(err.message || JSON.stringify(err));
    },

    mfaSetup: function(challengeName, challengeParameters) {
        cognitoUser.associateSoftwareToken(this);
    },

    associateSecretCode: function(secretCode) {
        var challengeAnswer = prompt('Please input the TOTP code.', '');
        cognitoUser.verifySoftwareToken(challengeAnswer, 'My TOTP device', this);
    },

    selectMFAType: function(challengeName, challengeParameters) {
        var mfaType = prompt('Please select the MFA method.', ''); // valid values for mfaType is "SMS_MFA", "SOFTWARE_TOKEN_MFA"
        cognitoUser.sendMFASelectionAnswer(mfaType, this);
    },

    totpRequired: function(secretCode) {
        var challengeAnswer = prompt('Please input the TOTP code.', '');
        cognitoUser.sendMFACode(challengeAnswer, this, 'SOFTWARE_TOKEN_MFA');
    },

    mfaRequired: function(codeDeliveryDetails) {
        var verificationCode = prompt('Please input verification code', '');
        cognitoUser.sendMFACode(verificationCode, this);
    },
});
cognitoUser.sendMFASelectionAnswer(mfaType,this)
抛出错误

        var challengeAnswer = prompt('Please input the TOTP code.', '');
        cognitoUser.verifySoftwareToken(challengeAnswer, 'My TOTP device', this);
    }
抛出错误

        var challengeAnswer = prompt('Please input the TOTP code.', '');
        cognitoUser.verifySoftwareToken(challengeAnswer, 'My TOTP device', this);
    }
我甚至尝试从python中启用它

response = client.set_user_mfa_preference(
                SMSMfaSettings={
                    'Enabled': True|False,
                    'PreferredMfa': True|False
                },
                SoftwareTokenMfaSettings={
                    'Enabled': True|False,
                    'PreferredMfa': True|False
                },
                AccessToken=token_
            )
但上面写着无效的访问令牌,
token_u979;='eqwo59dnjwj******'

在使用boto3(Python对cognito进行详细研究后,我找到了启用软件MFA的解决方案

  • 将软件令牌与用户关联
  • 返回一个密码。使用otpauth将密码转换为qrcode

  • 验证从用户处接收的令牌
  • 设置用户MFA首选项
  • 注意:仅当启用任一MFA时,才能设置首选MFA

    注意:两个MFA都可以启用,但只有一个可以设置为首选 一段时间

    response = client.verify_software_token(
                AccessToken='Access Token',
                UserCode=]'Code received from the user',
                FriendlyDeviceName='ABC'
            )
    
    response_1 = client.set_user_mfa_preference(
                SMSMfaSettings={
                    'Enabled': False,
                    'PreferredMfa': False
                },
                SoftwareTokenMfaSettings={
                    'Enabled': True,
                    'PreferredMfa': True
                },
                AccessToken='Access Token'
            )