Android 将AWS Cognito池用户转换为联邦用户Id
我需要获取Cognito身份池用户的联邦身份Id 我的dynamodb表使用userId作为主键,其中userId是Cognito联邦标识Id(使用mobilehub配置)。在android应用程序中,我使用AmazonCongnitoIdentityProviderClient进行查询(该客户端使用IdentityManager正确实例化,并使用CognitoUserPoolsSignInProvider和FaceBooksSignInProvider)——该查询成功检索了我的cognito用户池中的所有用户(我确实使用了一个过滤器,但为了简单起见,这里删除了它):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用
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();