AWS Cognito GetCredentialsForIdentity

Я пытаюсь использовать подход, описанный в следующей статье блога, для аутентификации когнитивной идентичности в S3 из Java:

https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-authentication-part-4-enhanced-flow/

Я успешно реализовал провайдер аутентификации разработчика и могу получить действительный токен OpenId для моей когнитивной личности. Этот токен работает как в iOS, так и в Android SDK при загрузке / скачивании файлов на S3. К сожалению, мне не удалось успешно аутентифицировать ту же личность для S3 в моем приложении Java. Вот код, который я использую:

Map<String, String> logins = new HashMap();
logins.put("cognito-identity.amazonaws.com", cognitoOpenIdToken);
GetCredentialsForIdentityRequest getCredentialsRequest = 
  new GetCredentialsForIdentityRequest()
  .withIdentityId(cognitoIdentityId)
  .withLogins(logins);
AmazonCognitoIdentityClient cognitoIdentityClient = 
  new AmazonCognitoIdentityClient();
GetCredentialsForIdentityResult getCredentialsResult = 
  cognitoIdentityClient.getCredentialsForIdentity(getCredentialsRequest);

Вызов getCredentialsForIdentity завершается ошибкой «com.amazonaws.AmazonClientException: невозможно загрузить учетные данные AWS от любого поставщика в цепочке». Этот метод задокументирован как общедоступный API, не требующий аутентификации. Однако я заметил, что вызов завершается успешно, если выполняется из среды, в которой в системных переменных настроены действительные учетные данные IAM. Он не работает в средах, где это не так.

Я упустил что-то простое?


person Mike    schedule 31.05.2017    source источник


Ответы (2)


Вы пробовали инициализировать AmazonCognitoIdentityClient следующим образом?

новый AmazonCognitoIdentityClient (новый AnonymousAWSCredentials ());

В противном случае, в соответствии с разработкой AWS Java SDK, клиенты службы ищут учетные данные AWS, поскольку тот же клиент может использоваться и для доступа к API-интерфейсам с проверкой подлинности.

person Vinay Kushwaha    schedule 01.06.2017

возможно, это не то, что вам нужно быть другим пользователем IAM ... но то, что пользователь, который запускает ваш метод, имеет "deny" на sts:* (или некоторые другие действия, которые вам нужны)

person UXDart    schedule 31.05.2017
comment
это работает на Лямбде? - person UXDart; 31.05.2017
comment
Он не работает на Lambda. Насколько я понимаю, для вызова этого метода вообще не должен требоваться пользователь IAM, это общедоступный метод (для его вызова не требуются учетные данные). - person Mike; 31.05.2017
comment
согласен, но используете ли вы другие учетные данные / пользователя IAM, который, возможно, отказал в использовании sts? - person UXDart; 31.05.2017
comment
Нет, он не работает в средах, где не настроены учетные данные IAM. - person Mike; 31.05.2017