我正在构建一个将使用Cognito进行用户身份验证的Android应用。我使用Developer Authenticated Identities并成功从我的后端服务中检索身份ID和令牌,但我无法确定如何使用S3的身份ID和令牌。我已经在JavaScript中成功完成了这个......
AWS.config.region = 'us-east-1';
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
IdentityId: identityid,
Logins: {
'cognito-identity.amazonaws.com': token
}
});
我试过......
Map logins = new HashMap();;
logins.put("cognito-identity.amazonaws.com", token);
credentials = new CognitoCachingCredentialsProvider (
context,
"us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
Regions.US_EAST_1
);
credentials.setLogins(logins);
s3 = new AmazonS3Client(credentials);
List bucket = s3.listBuckets();
但这引发了异常......
无效的登录令牌。无法传递Cognito令牌。我也试过实现我自己的身份提供者类,详见此处......
https://docs.aws.amazon.com/cognito/latest/developerguide/developer-authenticated-identities.html
但这也不成功。有人能指出我正确的方向吗?
提前致谢。
答案 0 :(得分:0)
我是用Node.js做的,但我认为Android SDK有类似的API。在创建身份(使用Oauth提供程序,或者没有)后,您获得IdentityId,然后为该identityId请求IAM临时凭证。您将拥有accessKey,secretKey和令牌,使用它们来配置AWS.config。
之后,您可以使用AWS SDK中的任何服务,但您需要确保您的身份池附加了正确的角色/策略。
注意:提供最少且唯一需要的访问权限,否则您将公开您的服务以供恶意使用!
令牌有截止日期,您可以设置,我没有检查AWS Cognito是否自动刷新它。