我正在尝试使用以下博客文章中概述的方法从Java验证S3的Cognito身份:
我已经成功实现了开发人员身份验证提供程序,并且可以为我的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凭证的环境中完成调用,则调用成功。它在不是这种情况的环境中失败。
我错过了一些简单的东西吗?
答案 0 :(得分:1)
您是否尝试过以下方式初始化AmazonCognitoIdentityClient?
新的AmazonCognitoIdentityClient(新的AnonymousAWSCredentials());
否则,通过AWS Java SDK的设计,服务客户端会查找AWS凭据,因为同样的客户端也可用于访问经过身份验证的API。
答案 1 :(得分:0)
可能不是你需要成为另一个IAM用户...但是运行你方法的用户有一个&#34; deny&#34;在sts:*
(或您需要的其他一些行动)