#amazon-web-services #amazon-cognito
Вопрос:
У меня один и тот же код, который живет в двух разных средах. Разница, главным образом, в том, что используются разные пулы пользователей/идентификаторы. Одна среда работает нормально, другая при попытке доступа к S3 возвращает ошибку Unauthenticated access is not supported for this identity pool.
Глядя на значения, переданные/установленные при вызове CognitoIdentityCredentials
, я заметил, что тот, который работает, возвращает accessKey, data, and sessionToken
то, где тот, который ошибается, не делает. Эти значения являются либо undefined
или null
.
Код, который делает этот запрос, идентичен, только файл среды отличается только значениями. Я подтвердил, что предоставляю правильные значения для идентификатора пользователя, идентификатора и региона.
Я думаю, что, возможно, я пропустил разрешение или что-то в моем другом окружении или что-то в этом роде, но я не уверен, что именно.
Делается звонок в CognitoIdentityCredentials:
AWS.config.credentials = new AWS.CognitoIdentityCredentials(
{
IdentityPoolId: this.cognito.identityPoolId,
RoleArn: this.cognito.roleArn
},
{
region: this.awsRegion
}
);
Я проверил, что правильные значения отправляются для обеих сред. Однако, как уже говорилось, один работает (без ошибок и наборов accessKey, data, and sessionToken
), другой не работает (ошибки и значения не заданы).
Комментарии:
1. проверка
Enable access to unauthenticated identities
решает проблему, но это проблема безопасности, плюс в рабочем пуле идентификаторов это тоже не проверяется.2. Из-за упомянутой ошибки создается впечатление, что в ней отсутствует информация об аутентификации. Пока игнорируйте свой рабочий пул пользователей/пул идентификаторов. можете ли вы просто опубликовать код, в котором вы вызываете CognitoIdentityCredentials?
3. @NinadGaikwad обновлено…
4. Я не вижу никакого параметра входа в систему. Взгляните на примеры на этой странице. Вы передаете жетоны?
5. docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/… Эта страница*
Ответ №1:
Когда вы настраиваете ресурсы доступа с помощью Cognito, у вас есть два варианта:
- Разрешить несанкционированный доступ
- Не допускать несанкционированного доступа
Если вы не разрешаете пользователям, не прошедшим проверку подлинности, получать доступ к ресурсам AWS, им необходимо войти в систему, прежде чем они смогут получить учетные данные. Чтобы это сработало, вам нужно:
- Вход
- Получить идентификационный номер
const cognitoIdentity = new AWS.CognitoIdentity();
cognitoIdentity.getId({
IdentityPoolId: here_is_your_identity_pool_id,
Logins: {
['cognito-idp.here_is_your_region.amazonaws.com/here_is_your_user_pool_id']: 'here comes ID token'
}
});
- Токен обмена для учетных данных
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: here_is_your_identity_pool_id,
IdentityId: here_is_identity_id_obtained_previously,
Logins: {
['cognito-idp.here_is_your_region.amazonaws.com/here_is_your_user_pool_id']: 'here comes ID token'
}
});
Код, который вы показали, может работать только с пользователем, не прошедшим проверку подлинности.