2017-05-31 201 views
1

我嘗試使用下面的博客文章中介紹的方法來驗證從Java cognito身份S3:AWS Cognito GetCredentialsForIdentity

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

我已經成功地實施了開發商的認證供應商,可以檢索有效的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憑證的環境中完成調用,則該調用會成功。如果情況並非如此,它會失敗。

我是否缺少一些簡單的東西?

回答

1

有你嘗試以下列方式初始化AmazonCognitoIdentityClient?

新的AmazonCognitoIdentityClient(new AnonymousAWSCredentials());

否則,通過設計AWS Java SDK,服務客戶端將查找AWS憑證,因爲同樣的客戶端也可用於訪問經過身份驗證的API。

+0

就是這樣,謝謝你Vinay! – Mike

0

也許不是你需要另一個IAM用戶......但是運行你方法有一個上sts:*「拒絕」用戶(或者你需要一些其他操作)

+0

這是在Lambda上運行嗎? – UXDart

+0

它不在Lambda上運行。我的理解是,調用這個方法根本不需要IAM用戶,它是一個公共方法(不需要憑證來調用它)。 – Mike

+0

同意,但您是否使用其他憑據/ IAM用戶可能有「拒絕」的STS? – UXDart