我在Angular 8前端中使用AWS Cognito Javascript SDK来根据Cognito用户池注册,验证和认证用户。我现在可以使用用户名/密码和MFA验证成功验证用户身份。
我需要介绍的下一个用例是对用户名/密码身份验证进行独立的MFA挑战。我想通过会话被盗来保护管理系统中的某些敏感操作免受不良用户的侵害。
我的问题:Cognito是否有可能为已经登录的用户触发MFA挑战,而无需再次询问用户名/密码?
我尝试在身份验证后立即发送TOTP代码两次,希望它第二次可以使用,但是Cognito允许我在身份验证后仅发送一次TOTP。 Cognito第二次回应:
{"__type":"NotAuthorizedException","message":"Invalid session for the user, session can only be used once."}
供参考,以下是提交TOTP的代码。两次调用“常规”代码都会导致上述错误。
onSubmitTotp() {
if (this.scenario === 'verify') {
// Called after first login of the user and right after user set up his Authy/Google Authenticator account
this.cognitoUser.verifySoftwareToken(this.totp, 'My TOTP device', {
onSuccess: session => {
console.log(session);
},
onFailure: err => {
console.error(err);
}
});
} else if (this.scenario === 'regular') {
// Called after every login
this.cognitoUser.sendMFACode(this.totp, {
onSuccess: session => {
console.log(session);
},
onFailure: err => console.log(err)
}, 'SOFTWARE_TOKEN_MFA');
} else {
console.error('Unknown scenario for MFA');
}
}
我正在考虑将凭据保存在我的应用程序中,以便可以在后台重新提交凭据,以免用户再次键入凭据,但是有消息告诉我,这种方法将导致我们的安全专家遇到麻烦。