Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将AWS Cognito池用户转换为联邦用户Id_Android_Amazon Web Services_Amazon Dynamodb_Aws Sdk_Aws Cognito - Fatal编程技术网

Android 将AWS Cognito池用户转换为联邦用户Id

Android 将AWS Cognito池用户转换为联邦用户Id,android,amazon-web-services,amazon-dynamodb,aws-sdk,aws-cognito,Android,Amazon Web Services,Amazon Dynamodb,Aws Sdk,Aws Cognito,我需要获取Cognito身份池用户的联邦身份Id 我的dynamodb表使用userId作为主键,其中userId是Cognito联邦标识Id(使用mobilehub配置)。在android应用程序中,我使用AmazonCongnitoIdentityProviderClient进行查询(该客户端使用IdentityManager正确实例化,并使用CognitoUserPoolsSignInProvider和FaceBooksSignInProvider)——该查询成功检索了我的cognito用

我需要获取Cognito身份池用户的联邦身份Id

我的dynamodb表使用userId作为主键,其中userId是Cognito联邦标识Id(使用mobilehub配置)。在android应用程序中,我使用AmazonCongnitoIdentityProviderClient进行查询(该客户端使用IdentityManager正确实例化,并使用CognitoUserPoolsSignInProvider和FaceBooksSignInProvider)——该查询成功检索了我的cognito用户池中的所有用户(我确实使用了一个过滤器,但为了简单起见,这里删除了它):

ArrayList cognitoPoolUsers=实例化的MazonCongnitoIdentityProviderClient().listUsers().getUsers();
cognitoPoolUsers中的用户具有诸如电子邮件和用户名之类的属性,但是用于dynamo主键的用户ID是链接到cognitoPoolUsers的联邦用户的用户ID

如果我已经成功地检索到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)
} 
ArrayList cognitoPoolUsers=实例化的MazonCongnitoIdentityProviderClient().listUsers().getUsers();

对于(int k=0;k您可以通过登录用户获取Id令牌并调用GetId API来获取用户池用户的标识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();
//登录并获取Id令牌。
//不带https:的令牌的“iss”声明将是providerName
credentialsProvider=新的CognitoCachingCredentialsProvider(上下文、标识池、区域);
Map logins=credentialsProvider.getLogins();
如果(登录=空){
logins=newhashmap();
}
logins.put(提供者名称、令牌);
credentialsProvider.setLogins(登录名);
字符串id=credentialsProvider.getIdentityId();

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

Simple。登录Userpool用户;获取令牌并调用GetId API,并在loginmap@agent420,成功了!是否要添加一个快速代码段作为实际注释,以便我可以正式接受你的答案是什么?太好了!补充了我的评论作为答案
//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();