将 AWS Cognito 池用户转换为联合用户 ID
Converting AWS Cognito Pool user to Federated user Id
我需要获取 Cognito 身份池用户的联合身份 ID。
我的 dynamodb 表使用 userId 作为主键,其中 userId 是 Cognito Federated Identity Id(使用 mobilehub 配置)。在 android 应用程序中,我使用 AmazonCognitoIdentityProviderClient(使用 IdentityManager 正确实例化并使用 CognitoUserPoolsSignInProvider 和 FacebookSignInProvider)进行查询——此查询成功检索了我的认知用户池中的所有用户(我确实使用了过滤器,但为简单起见已在此处将其删除):
ArrayList<UserType> cognitoPoolUsers = instantiatedAmazonCognitoIdentityProviderClient().listUsers().getUsers();
cognitoPoolUsers 中的用户具有电子邮件和用户名等属性,但用于 dynamo 主键的 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)
}
您可以通过登录用户获取 Id 令牌并调用 GetId API 来获取 Userpool 用户的身份 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 是相关调用。在登录映射参数中添加用户池令牌。
我需要获取 Cognito 身份池用户的联合身份 ID。
我的 dynamodb 表使用 userId 作为主键,其中 userId 是 Cognito Federated Identity Id(使用 mobilehub 配置)。在 android 应用程序中,我使用 AmazonCognitoIdentityProviderClient(使用 IdentityManager 正确实例化并使用 CognitoUserPoolsSignInProvider 和 FacebookSignInProvider)进行查询——此查询成功检索了我的认知用户池中的所有用户(我确实使用了过滤器,但为简单起见已在此处将其删除):
ArrayList<UserType> cognitoPoolUsers = instantiatedAmazonCognitoIdentityProviderClient().listUsers().getUsers();
cognitoPoolUsers 中的用户具有电子邮件和用户名等属性,但用于 dynamo 主键的 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)
}
您可以通过登录用户获取 Id 令牌并调用 GetId API 来获取 Userpool 用户的身份 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 是相关调用。在登录映射参数中添加用户池令牌。