Если MFA включен в AWS cognito, нужно ли мне создавать js на стороне клиента для вызова cognitoUser.authenticateUser() из-за promt для кода?

#node.js #amazon-web-services #amazon-cognito #aws-amplify

#node.js #amazon-веб-сервисы #amazon-cognito #aws-amplify

Вопрос:

Я использую reactjs и node на стороне сервера.

Как вы можете видеть в приведенной ниже части кода «требуется mfa», если все это находится на узле, то я действительно не могу «запросить» у пользователя код, я должен передать это обратно во внешний интерфейс.

Пробованное решение: Если я передам требуемый MFA во внешний интерфейс и получу ввод пользователя, а затем отправлю его обратно на узел для вызова «RESPOND Auth», я получаю два кода MFA в своем SMS-сообщении.

Пробовал ли я другие решения? Я не решаюсь использовать amplify, потому что все находится на интерфейсе, в идеале я хотел бы выполнить свою аутентификацию на серверной части (таким образом, node). Другой вариант, к которому я склоняюсь, — это просто использовать initiateAuth api вместо «cognitoUser.AuthenticateUser». Таким образом, я могу получить ответ на запрос и передать его последовательно. Но в соответствии с моим первоначальным вопросом, мне интересно, могу ли я реализовать приведенный ниже код и иметь возможность перенаправлять пользователей на ввод кода MFA (без дублирования sms-сообщения MFA)

 AWS.config.update({
  region: process.env.Region
});
var AmazonCognitoIdentity = require('amazon-cognito-identity-js');

const poolData = { //--Moved to env variables
  UserPoolId: process.env.UserPoolId, // your user pool id here
  ClientId: process.env.ClientId // your app client id here
};
const userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);


router.post('/api/authenticateuser', (req, res) => {
  const val = req.body;
  var userData = {
    Username: val.value.user, // your username here
    Pool: userPool
  };
  var authenticationData = {
    Username: val.value.user, // your username here
    Password: val.value.pass, // your password here
  };
  const authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData);
  const cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
  cognitoUser.authenticateUser(authenticationDetails, {
    onSuccess: function(result) {
      console.log('You are now logged in.');
      console.log(result);
      const accessToken = result.getAccessToken().getJwtToken();

      const idToken = result.getIdToken().getJwtToken();
      res.json({
        accessToken,
        idToken
      });
    },
    onFailure: function(err) {
      res.json(err);
    },
    mfaRequired: function(codeDeliveryDetails) {
      // console.log("mfa enabled");

      // var verificationCode = prompt('Please input verification code' ,'');
      // cognitoUser.sendMFACode(verificationCode, this);

      // res.json({ MFA:codeDeliveryDetails})
    }
  });
})  

Комментарии:

1. Я также ищу аналогичный подход, то есть аутентификацию mfa в nodejs путем сбора кода проверки из интерфейса, итак, вы нашли какое-либо решение?

2. есть какие-либо обновления по этому поводу? @rio