iOS-вход в Facebook с проблемами федеративных удостоверений AWS
Я использую AWS Cognito Federated ID в приложении iOS для социальных сетей (Facebook, Google). После входа в Facebook пользователь получает ошибку "Токен не от поддерживаемого поставщика этого пула идентичностей". Если я разрешу неаутентифицированные идентификаторы в идентификаторах Fed, то этот пользователь получит неаутентифицированные идентификаторы пользователей (связанные логины = 0) в браузере идентификаторов и получит ключ сеанса и т. Д. Кто-нибудь может помочь в решении этой проблемы?
Пожалуйста, не отмечайте этот вопрос как дублированный, так как я видел все подобные вопросы и следовал там решениям, но безрезультатно!
Краткое описание кода:
- Я добавил Facebook в проверенных провайдерах для федеративного идентификатора.
- Я также добавил Facebook в поставщики удостоверений для пула пользователей и сделал сопоставление атрибутов (сопоставленный идентификатор и адрес электронной почты).
Я создал класс поставщика социальных идентификаторов, который реализует протокол AWSIdentityProviderManager. Этот класс содержит метод входа в систему, как указано ниже:
(AWSTask<NSDictionary<NSString *, NSString *> *> )logins { FBSDKAccessToken fbToken = [FBSDKAccessToken currentAccessToken]; if(fbToken){ NSString *token = fbToken.tokenString; return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : token }]; } else { NSLog(@"FB Token is not found in AWSSocialIdentityProvider class"); return [AWSTask taskWithError:[NSError errorWithDomain:@"facebook" code:-1 userInfo:@{@"error":@"No current Facebook access token"}]]; } }
My Sign In View Controller выполняет вход в FB. Он создает fbCredentialsProvider, передавая класс socialIDProvider в качестве identityProvider в своей конструкции, реализованной, как показано ниже:
self.fbCredentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"us-east-1:XXXXXXXXXXXX" identityProviderManager:self.socialIDProvider]; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:self.fbCredentialsProvider]; [AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration; //wipe cached credentials [self.fbCredentialsProvider clearCredentials];
// Для вызова логинов fb [self.fbCredentialsProvider credentials];
Приведенный выше код вызывается в методе didCompleteWithResult кнопки входа в FB. Вот и все.