На beanstalk-Cognito прекращает аутентификацию через некоторое время и выдает ошибку «отсутствующие учетные данные в конфигурации» - PullRequest
0 голосов
/ 29 марта 2019

Сначала я искал решения, но не могу точно определить проблему.

Это приложение, размещенное на beanstalk и работающее как положено после развертывания. Я могу войти, сделать то, что мне нужно, и закрыть приложение. Если браузер обновлен, вам придется снова войти в систему (как и предполагалось).

Проблема: Я развернул свое приложение около 12:00 и около 14:00. Я попытался войти в систему и получил сообщение об ошибке «Отсутствуют учетные данные в конфигурации».

Я снова развернулся около 14:20, и на данный момент (14:58) он все еще работает как положено. Но если это снова выдает ту же ошибку, что я, возможно, делаю неправильно?

Пожалуйста, посмотрите ниже фрагмент кода для моего маршрута аутентификации в узле js. Это приложение узла beanstalkactjs.

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) => {

  var authenticationData = {
    Username: val.value.user, // your username here
    Password: val.value.pass, // your password here
  };
  // AWS.config.credentials = new AWS.CognitoIdentityCredentials({
  //     IdentityPoolId: 'IDENTITY_POOL_ID',
  // });


  const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
  var loginParams = {
    AuthFlow: 'USER_PASSWORD_AUTH',
    /* required */
    ClientId: process.env.ClientId,
    /* required */
    AuthParameters: {
      'USERNAME': val.value.user,
      'PASSWORD': val.value.pass
    }
  };
  cognitoidentityserviceprovider.initiateAuth(loginParams, function(err, data) {
    if (err) {
      // console.log(err, err.stack); // an error occurred
      res.json(err);
    } else {
      console.log(data); // successful response
      if (data.ChallengeName === process.env.Challenge_NEW_PASS) {
        res.json({
          changePass: "changePass",
          session: data.Session
        });
      } else if (data.ChallengeName === process.env.Challenge_MFA) {
        // console.log(data);
        res.json({
          MFA: "MFA",
          session: data.Session,
          user: val.value.user
        });
      } else {

        const accessToken = data.AuthenticationResult.AccessToken;
        // Add the User's Id Token to the Cognito credentials login map.
        const idToken = data.AuthenticationResult.IdToken;
        AWS.config.credentials = new AWS.CognitoIdentityCredentials({
          IdentityPoolId: process.env.IdentityPoolId,
          Logins: {
            [process.env.CognitoIdp]: idToken
          },
          LoginId: val.value.user
        });
        res.json({
          accessToken,
          idToken,
          user: val.value.user,
          test: data
        });
      }
    }
  });
})

1 Ответ

0 голосов
/ 30 марта 2019

Сеанс Cognito истекает через 1 час по умолчанию.Срок действия вашего временного ключа доступа и секрета истекает вместе с ним, равно как и идентификационный токен и токен сеанса.Вам придется использовать токен обновления каждый час, чтобы получить новые учетные данные.Если вы хотите избежать этого, попробуйте использовать Amplify Authentication , которая автоматически выполнит обновление для вас.

...