AWS Cognito GetCredentialsForIdentity

时间:2017-05-31 17:39:52

标签: java amazon-web-services amazon-cognito

我正在尝试使用以下博客文章中概述的方法从Java验证S3的Cognito身份:

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

我已经成功实现了开发人员身份验证提供程序,并且可以为我的cognito身份检索有效的OpenId令牌。在将文件上载/下载到S3时,该令牌适用于iOS和Android SDK。不幸的是,我无法在Java应用程序中成功验证与S3相同的身份。这是我正在使用的代码:

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凭证的环境中完成调用,则调用成功。它在不是这种情况的环境中失败。

我错过了一些简单的东西吗?

2 个答案:

答案 0 :(得分:1)

您是否尝试过以下方式初始化AmazonCognitoIdentityClient?

新的AmazonCognitoIdentityClient(新的AnonymousAWSCredentials());

否则,通过AWS Java SDK的设计,服务客户端会查找AWS凭据,因为同样的客户端也可用于访问经过身份验证的API。

答案 1 :(得分:0)

可能不是你需要成为另一个IAM用户...但是运行你方法的用户有一个&#34; deny&#34;在sts:*(或您需要的其他一些行动)