如何使用 Cognito Identity 向我的 Identity/User 池进行身份验证?
How can i authenticate to my Identity/User Pool with Cognito Identity?
几天来我一直在尝试解决这个问题,但我不知道问题出在哪里。
我在 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() 中失败,它在抽象父 class 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 中输入什么值,我都会得到错误
Invalid login token. Issuer doesn't match providerName
在 cid.getid(getIdRequest)。
如果您在 Mobile Hub 中创建应用程序并生成代码,则大部分代码都可以免费下载。然后,您可以配置身份验证提供程序 - FB、Google 等
我做错了什么?
谢谢。
Edit :以下是我尝试过的示例
令牌始终是地图中的对象。下面是不同的键
- "cognito-identity.amazonaws.com"
- 用户池 ID - us-east-1_xxxxxxxxx
- 用户池 ARN - cognito-idp:us-east-1:xxxxxxxxxxxx:userpool/us-east-1_xxxxxxxxx
好的,我找到了答案 - 我在 loginMap 中输入了错误的键值。
应该是
cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>
正如问题中链接的文档中所说
我不知道我怎么没看到。
几天来我一直在尝试解决这个问题,但我不知道问题出在哪里。
我在 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() 中失败,它在抽象父 class 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 中输入什么值,我都会得到错误
Invalid login token. Issuer doesn't match providerName
在 cid.getid(getIdRequest)。
如果您在 Mobile Hub 中创建应用程序并生成代码,则大部分代码都可以免费下载。然后,您可以配置身份验证提供程序 - FB、Google 等
我做错了什么?
谢谢。
Edit :以下是我尝试过的示例 令牌始终是地图中的对象。下面是不同的键
- "cognito-identity.amazonaws.com"
- 用户池 ID - us-east-1_xxxxxxxxx
- 用户池 ARN - cognito-idp:us-east-1:xxxxxxxxxxxx:userpool/us-east-1_xxxxxxxxx
好的,我找到了答案 - 我在 loginMap 中输入了错误的键值。
应该是
cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>
正如问题中链接的文档中所说
我不知道我怎么没看到。