如何使用Cognito Identity对我的身份/用户池进行身份验证?

时间:2016-05-04 17:28:30

标签: android authentication amazon-web-services identity amazon-cognito

我一直试图解决这个问题几天但我无法弄清问题是什么。

我在AWS Cognito上有一个用户池和一个标识池。我已经运行了示例代码并使用它来成功登录并注册用户和Facebook和Google+。登录后,我可以使用令牌进行身份验证,以使用SNS或同步服务。

我已经注册了一个用户,并在使用Cognito Identity获得了一个令牌(登录后)。但是,下一步是使用令牌进行身份验证。这是我不断收到错误的地方

我已按照Integrating User Pools with Amazon Cognito Identity的说明操作,然后收到一个令牌,然后尝试将其与池ID一起传递给凭据提供程序。

  credentialsProvider.clear();
  credentialsProvider.withLogins(loginMap).refresh();

我的代码在refresh()上失败。此时,credentialsProvider是一个AWSBasicCognitoIdentityProvider,而refresh()在super.refresh()中失败,它在抽象父类AWSAbstractCognitoIdentityProvider中调用getIdentityId()

@Override
public String getIdentityId() {
    if (identityId == null) {
        GetIdRequest getIdRequest = new GetIdRequest()
                .withAccountId(getAccountId())
                .withIdentityPoolId(getIdentityPoolId())
                .withLogins(loginsMap);

        appendUserAgent(getIdRequest, getUserAgent());

        GetIdResult getIdResult = cib.getId(getIdRequest);

无论我在loginsMap中放入什么值,我都会收到错误

  

无效的登录令牌。 Issuer与providerName

不匹配

at cid.getid(getIdRequest)。

如果您在Mobile Hub中创建应用并生成代码,则可以免费下载大部分代码。然后,您可以配置身份验证提供程序 - FB,Google等。

我做错了什么?

感谢。

修改:以下是我尝试过的示例 令牌始终是地图中的对象。以下是不同的密钥

  • “cognito-identity.amazonaws.com”
  • 用户池ID - us-east-1_xxxxxxxxx
  • 用户池ARN - cognito-idp:us-east-1:xxxxxxxxxxxx:userpool / us-east-1_xxxxxxxxx

1 个答案:

答案 0 :(得分:3)

好的,我找到了答案 - 我在loginMap中输入了错误的键值。

应该是

  

cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>

正如在问题中链接的文档中所述

我不知道我怎么没看到。