将AWS Cognito Pool用户转换为联合用户ID

时间:2018-01-23 23:34:04

标签: android amazon-web-services amazon-dynamodb aws-sdk aws-cognito

我需要获取Cognito Identity Pool用户的联合身份标识。

我的dynamodb表使用userId作为主键,其中userId是Cognito Federated Identity Id(使用mobilehub配置)。在Android应用程序中,我使用AmazonCognitoIdentityProviderClient(使用IdentityManager正确实例化并使用CognitoUserPoolsSignInProvider& FacebookSignInProvider)进行查询 - 此查询成功检索了我的cognito用户池中的所有用户(我使用过滤器,但是为了简单起见已删除它,这里):

ArrayList<UserType> cognitoPoolUsers = instantiatedAmazonCognitoIdentityProviderClient().listUsers().getUsers();

cognitoPoolUsers中的用户具有电子邮件和用户名等属性,但用于发电子主键的userId是链接到cognitoPoolUser的联合用户的userId。

如果我已成功检索到cognitoPoolUsers列表,我该如何检索相应的联合身份userId?

结束目标(我实际上会使用batchLoad,但为了简单起见..):

ArrayList<UserType> cognitoPoolUsers = instantiatedAmazonCognitoIdentityProviderClient().listUsers().getUsers();

for(int k=0; k<cognitoPoolUsers.size(); k++) {
  UserType cognitoPoolUser = cognitoPoolUsers.get(k);
  SomeDynamoDO dynamoDO = new SomeAmazonDO();

  //Unknown Step:
  String correspondingFederatedId = extractFederatedId(cognitoPoolUser);

  dynamoDO.setUserId(correspondingFederatedId)
  dynamodbMapper.load(dynamoDO)
} 

1 个答案:

答案 0 :(得分:1)

您可以通过登录用户获取Id令牌并调用GetId API来获取Userpool用户的Identity Id。使用Android SDK:

//Login and get the Id token. 
//The 'iss' claim of the token without https: will be the providerName
credentialsProvider = new CognitoCachingCredentialsProvider(context, IDENTITY_POOL_ID,REGION);
Map<String, String> logins = credentialsProvider.getLogins();
if (logins == null) {
    logins = new HashMap<String, String>();
}
logins.put(providerName, token);
credentialsProvider.setLogins(logins);
String id=credentialsProvider.getIdentityId();

如果您要使用低级API调用,则this是相关调用。在登录映射参数中添加Userpool令牌。