#javascript #node.js #amazon-web-services #amazon-cognito #amazon-elastic-beanstalk
#javascript #node.js #amazon-веб-сервисы #amazon-cognito #amazon-elastic-beanstalk
Вопрос:
Сначала я искал решения, но я не могу точно определить проблему.
Это приложение размещено на beanstalk и после развертывания работает по назначению. Я могу войти в систему, сделать то, что мне нужно, и закрыть приложение. Если браузер обновлен, вам придется снова войти в систему (как и предполагалось).
Проблема: я развернул свое приложение около 12 часов дня, и около 14 часов дня я попытался войти в систему, и я получаю ошибку «отсутствуют учетные данные в конфигурации». Ошибка.
Я снова развернул около 14: 20, и на данный момент (14: 58) он все еще работает по назначению. Но если это снова выдает ту же ошибку, что я, возможно, делаю не так?
Пожалуйста, смотрите приведенный ниже фрагмент кода для моего маршрута аутентификации в node js. Это узловое приложение beanstalk reactjs.
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:
Сеанс Cognito по умолчанию истекает через 1 час. Ваш временный ключ доступа и секрет истекают вместе с ним, а также токен удостоверения и токен сеанса. Вам придется использовать токен обновления каждый час, чтобы получать новые учетные данные. Если вы хотите избежать этого, вы можете попробовать использовать усиленную аутентификацию, которая автоматически обновит для вас.
Комментарии:
1. Я получаю эту ошибку при попытке входа в систему для получения учетных данных
2. Используете ли вы идентификационный токен для получения временного ключа доступа и секретного ключа или используете имя пользователя и пароль для получения совершенно новых токенов?
3. Я использую имя пользователя и пароль, чтобы получить совершенно новые токены для инициализации входа в систему и входа в приложение. Затем после этого я использую idtoken для установки aws.config.credentials, а затем получаю временные учетные данные для передачи в s3 put bject. Но ошибка, которую я получаю, возникает при первоначальном входе в систему.