如何将cognito用户池与身份池集成?

时间:2016-07-31 20:57:04

标签: ios amazon-web-services amazon-cognito

我正在使用CognitoUserPoolsSample iOS Obj-C应用程序并尝试添加与Cognito Identity的集成。我已经设置了一个用户池和一个标识池,用户池设置为标识池的身份验证提供程序。用户池工作正常,但用户未显示在标识池中。 这是我在applicationDidFinishLaunchingWithOptions中的内容:

//setup service config
AWSServiceConfiguration *serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil];

//Configure user pool
AWSCognitoIdentityUserPoolConfiguration *userPoolConfiguration = [[AWSCognitoIdentityUserPoolConfiguration alloc] initWithClientId:@"CLIENT_ID"  clientSecret:@"CLIENT_SECRET" poolId:@"POOL_ID"];
[AWSCognitoIdentityUserPool registerCognitoIdentityUserPoolWithConfiguration:serviceConfiguration userPoolConfiguration:userPoolConfiguration forKey:@"UserPool"];
AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"];

//configure identity pool
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc]
                                                      initWithRegionType:AWSRegionUSEast1
                                                      identityPoolId:@"IDENTITY_POOL_ID"
                                                      identityProviderManager:pool];
AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider];
[AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration;

到目前为止这是正确的吗?从这里下一步是什么?为什么我注册新用户时它不会出现在身份池中?标识池控制台显示已创建的零标识。

2 个答案:

答案 0 :(得分:1)

您需要将Cognito用户池中的令牌提供给Cognito联合身份服务。这正是您将Facebook或Google或任何其他提供商与联合身份服务集成的方式。

dev guide pageblog post详细介绍了此过程。

答案 1 :(得分:1)

嗨这里需要了解的关键是,当你致电:

AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc]
                                                      initWithRegionType:AWSRegionUSEast1
                                                      identityPoolId:@"IDENTITY_POOL_ID"
                                                      identityProviderManager:pool];

AWS框架将为您设置一切,Cognito用户池和与联合身份的集成将无缝地工作。

我最初忽略的一个关键注意事项是:http://docs.aws.amazon.com/cognito/latest/developerguide/getting-credentials.html

[[credentialsProvider getIdentityId] continueWithBlock:^id(AWSTask *task) {
    if (task.error) {
        NSLog(@"Error: %@", task.error);
    }
else {
       // the task result will contain the identity id
       NSString *cognitoId = task.result;
   }
return nil;
}];

强制从服务器刷新凭据。用户和会话中包含的对象可用于确认登录和相关的认知ID以及会话令牌。

注意不要将MobileHubHelper与上面的代码一起使用。由于移动HUB Helper会破坏所有这些。