#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
- Связать программный токен с пользователем
response = client.associate_software_token(
AccessToken=user_as_json['access_token'],
)
Которые возвращают секретный код. используйте otpauth, чтобы преобразовать секретный код в qr-код
- Проверьте токен, полученный при использовании
response = client.verify_software_token(
AccessToken=user_as_json['access_token'],
UserCode='Code received from the user',
FriendlyDeviceName='ABC'
)
- Задайте предпочтения пользователя MFA
response_1 = client.set_user_mfa_preference(
SMSMfaSettings={
'Enabled': False,
'PreferredMfa': False
},
SoftwareTokenMfaSettings={
'Enabled': True,
'PreferredMfa': True
},
AccessToken='Access Token'
)
Примечание: Предпочтительный MFA может быть установлен, только если включен любой из MFA.
Примечание: Могут быть включены оба MFA, но только для одного может быть установлено значение предпочтительный одновременно