Android和AWS Cognito Developer经过身份验证的身份

时间:2016-03-14 17:21:08

标签: android amazon-web-services amazon-s3 amazon-cognito

我正在构建一个将使用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

但这也不成功。有人能指出我正确的方向吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我是用Node.js做的,但我认为Android SDK有类似的API。在创建身份(使用Oauth提供程序,或者没有)后,您获得IdentityId,然后为该identityId请求IAM临时凭证。您将拥有accessKey,secretKey和令牌,使用它们来配置AWS.config。

之后,您可以使用AWS SDK中的任何服务,但您需要确保您的身份池附加了正确的角色/策略。

注意:提供最少且唯一需要的访问权限,否则您将公开您的服务以供恶意使用!

令牌有截止日期,您可以设置,我没有检查AWS Cognito是否自动刷新它。