我需要根据他们的要求为Cognito用户启用MFA。我尝试了SMS MFA,并且运行良好,但是当涉及到软件MFA (SOFTWARE_TOKEN_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);
}
引发错误我什至尝试通过python启用它
response = client.set_user_mfa_preference(
SMSMfaSettings={
'Enabled': True|False,
'PreferredMfa': True|False
},
SoftwareTokenMfaSettings={
'Enabled': True|False,
'PreferredMfa': True|False
},
AccessToken=token_
)
但是它说无效的访问 token ,token_ ='eqQwo59dnjwj *******'
最佳答案
在通过boto3( Python )对cognito进行了详细研究之后,我找到了启用Software MFA的解决方案
response = client.associate_software_token(
AccessToken=user_as_json['access_token'],
)
其中返回一个密码。使用otpauth将密码转换为qrcoderesponse = 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'
)
注意:仅当启用了任一MFA时,才可以设置首选MFA。注意:可以同时启用MFA,但在以下位置只能将其设置为首选
一个时间
关于javascript - 通过Python Boto3为认知用户启用SOFTWARE_TOKEN_MFA,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63885420/