2015-06-11 1 views
2

Я пытаюсь интегрировать Google с Amazon Cognito в приложение iOS с помощью SDK для входа в Google, но я не могу понять, как получить Значок идентификатора JWT правильно. Я уверен, что все настроено правильно, поскольку как Google Sign-In, так и Cognito работают независимо.Получение токена идентификатора межсайтового клиента для AWS из SDK для входа в систему Google

Я настраиваю GIDSignIn следующим образом.

[GIDSignIn sharedInstance].scopes = @[kGTLAuthScopePlusLogin, kGTLAuthScopeDrive]; 
[[GIDSignIn sharedInstance] setClientID:kClientID]; 
[GIDSignIn sharedInstance] setServerClientID:kServerClientId]; 

, а затем, чтобы получить id_token, как указано here с исключением того, что я использую Google для входа в систему, а не Google+ зарегистрировались, который не имеет GTMOAuth2Authentication.

- (void)googleSignedIn:(GIDGoogleUser *) user 
    { 
    NSLog(@"AWSManager: Google signed in, id token = %@", user.authentication.idToken); 
    NSString *idToken = user.authentication.idToken; 
    self.credentialsProvider.logins = @{ @(AWSCognitoLoginProviderKeyGoogle): idToken}; 

но idtoken не является текстовым веб-токеном json, это всего лишь кусок символов. AWS выбрасывает эту ошибку -

AWSiOSSDKv2 [Error] AWSIdentityProvider.m line:185 
| __51-[AWSAbstractCognitoIdentityProvider getIdentityId]_block_invoke169 
| GetId failed. 

Error is [Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=9 
"The operation couldn’t be completed. (com.amazonaws.AWSCognitoIdentityErrorDomain error 9.)" 
UserInfo=0x8fa5eb8e4e40{__type=NotAuthorizedException, message=Token is not from a supported provider of this identity pool.}] 

Я понятия не имею, что я должен делать. Я довольно новичок в объективе-c и все это сделал на Android раньше. На андроиде я сделал:

String mServerClientId = "audience:server:client_id:xxxxxxxxxx.apps.googleusercontent.com" 
    String token = GoogleAuthUtil.getToken(getApplicationContext(), accountName, mServerClientId); 

для извлечения лексем, но насколько я могу сказать, что нет ничего подобного, что на IOS. При необходимости я могу предоставить дополнительную информацию.

Спасибо!

ответ

8

Из-за ошибки похоже, что clientId неправильно настроен в конфигурации пула идентификаторов. Google имеет разные идентификаторы клиентов для каждой платформы, для поддержки нескольких идентификаторов клиентов, вы должны использовать поддержку Cognito для общих поставщиков OpenID Connect Identity. Выполните следующие шаги:

  1. Перейдите в раздел поставщика идентификационных данных консоли AWS IAM.
  2. Создайте идентификатор поставщика OpenId Connect с URL-адресом поставщика как https://accounts.google.com и Аудитория как один из идентификаторов клиента.
  3. Следуйте инструкциям по созданию поставщика удостоверений, и позже у вас будет возможность добавить дополнительные идентификаторы клиентов.
  4. Перейти на Amazon Cognito Console.
  5. Создайте или отредактируйте пул идентификаторов и добавьте поставщик идентификации идентификатора OpenID в пул. Это позволит вам доверять нескольким идентификаторам клиентов.

Вы можете следить за документацией Cognito для входа в систему Google here и поставщиками соединений OpenID here.

Кроме того, токен, который вы получаете, фактически кодируется Base64. Он состоит из трех частей, разделенных периодом.

  1. Используемый алгоритм.
  2. Полезная нагрузка.
  3. Подпись, которую проверяет Cognito.

Вы можете использовать this классный инструмент для декодирования маркеров.

Спасибо,
Rachit

+0

Спасибо так много. Получил все! Ядро входа в кодировку base64 действительно отбросило меня. Вы были на 100% правильны в том, что мне нужно было настроить OpenId, а не использовать учетные данные Google+, как это было на Android. – charliebeckwith

Смежные вопросы