Включение SOFTWARE_TOKEN_MFA через Python Boto3 для пользователя cognito

#javascript #amazon-web-services #boto3 #amazon-cognito #chalice

#javascript #amazon-веб-сервисы #boto3 #amazon-cognito #чаша

Вопрос:

Мне нужно включить MFA для пользователей Cognito в соответствии с их требованиями. Я попробовал SMS MFA, и это сработало отлично, но когда дело доходит до программного MFA (SOFTWARE_TOKEN_MFA), я не смог найти никаких надлежащих документов или примеров о том, как включить его с помощью кода. Либо через Javascript, либо через python (Boto3)
введите описание изображения здесь

На вышеупомянутом рисунке представлены мои настройки MFA для пула пользователей Cognito. я попробовал несколько примеров для 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);
    }
  

выдает ошибку

Я даже попробовал то же самое, чтобы включить его из python

 response = client.set_user_mfa_preference(
                SMSMfaSettings={
                    'Enabled': True|False,
                    'PreferredMfa': True|False
                },
                SoftwareTokenMfaSettings={
                    'Enabled': True|False,
                    'PreferredMfa': True|False
                },
                AccessToken=token_
            )
  

Но в нем говорится о недопустимом токене доступа,
token_ = ‘eqQwo59dnjwj*******’

Ответ №1:

После подробного изучения cognito с помощью boto3 (Python) я нашел решение для включения программного MFA

  1. Связать программный токен с пользователем
 response = client.associate_software_token(
         AccessToken=user_as_json['access_token'],
    )
  

Которые возвращают секретный код. используйте otpauth, чтобы преобразовать секретный код в qr-код

  1. Проверьте токен, полученный при использовании
 response = client.verify_software_token(
            AccessToken=user_as_json['access_token'],
            UserCode='Code received from the user',
            FriendlyDeviceName='ABC'
        )
  
  1. Задайте предпочтения пользователя MFA
 response_1 = client.set_user_mfa_preference(
            SMSMfaSettings={
                'Enabled': False,
                'PreferredMfa': False
            },
            SoftwareTokenMfaSettings={
                'Enabled': True,
                'PreferredMfa': True
            },
            AccessToken='Access Token'
        )
  

Примечание: Предпочтительный MFA может быть установлен, только если включен любой из MFA.

Примечание: Могут быть включены оба MFA, но только для одного может быть установлено значение предпочтительный одновременно