AWS Cognito CognitoIdentityCredentials не устанавливает значения доступа при вызове S3

#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, у вас есть два варианта:

  1. Разрешить несанкционированный доступ
  2. Не допускать несанкционированного доступа

Если вы не разрешаете пользователям, не прошедшим проверку подлинности, получать доступ к ресурсам AWS, им необходимо войти в систему, прежде чем они смогут получить учетные данные. Чтобы это сработало, вам нужно:

  1. Вход
  2. Получить идентификационный номер
 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'
    }
});
 
  1. Токен обмена для учетных данных
 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'
    }
});
 

Код, который вы показали, может работать только с пользователем, не прошедшим проверку подлинности.