在Android应用中,我可以使用Cognito成功进行身份验证,Cognito会返回CognitoIdToken和CognitoAccessToken。
但我无法弄清楚如何使用它来进行实际的身份验证调用,比如Lambda或S3。似乎CognitoIdentityProvider(我似乎能够使用它)和CognitoCredentialsProvider(我没有)之间存在鸿沟。
感谢您的想法,甚至指向使用Cognito和经过身份验证的调用/角色的示例的指针。
[edit]红利问题:有人可以解释为什么有AWSCognito *和AmazonCognito *,为什么它们看起来几乎完全不相关?
答案 0 :(得分:2)
在aws控制台中查看您的联合身份池。在身份浏览器中查找您正在通过身份验证的identityId(来自您的日志)。
以下是关键:如果身份标识不显示登录信息,那么您从未进行过身份验证。 *当我说登录时,每个身份都有一个登录计数,如果你点击身份ID,它会显示身份验证发生的identityProviderName。
这是一个简单的测试,如果您有登录验证。如果你不这样做,你就不是。现在为什么AWS上没有任何文档说明......嗯......谁知道。
如果您通过身份验证,那么SDK会存储令牌,您不必担心它可以开始使用服务配置的aws。
(响应基于IOS sdk,但我相信这些问题,它们是相同的 - The diagrams in here may help you,但这些是IOS SDK的笔记,我承认我没有在Android中尝试过这个)。
答案 1 :(得分:1)
我最终确定我缺少将令牌设置为凭证提供程序的调用:
final CognitoCachingCredentialsProvider credentialsProvider = getCredentialsProvider(applicationContext);
Map<String, String> logins = new HashMap<String, String>();
logins.put(Constants.COGNITO_USER_POOL_LOGIN_STRING, cognitoUserSession.getIdToken().getJWTToken());
credentialsProvider.setLogins(logins);
其中Constants.COGNITO_USER_POOL_LOGIN_STRING类似于“cognito-idp.us-west-2.amazonaws.com/”+ MY_COGNITO_USER_POOL_ID。执行此操作后,TransferUtility对象能够通过身份验证下载。之前获得的TransferUtility就像这样(编辑过):
CognitoCredentialsProvider cp = . . .
AmazonS3Client s3Client = new AmazonS3Client(cp);
TransferUtility s3transferUtility = new TransferUtility(s3Client);