2013-04-23 1 views
4

Я уже два дня бил головой о стену, чтобы попросить о помощи.Извлечь данные из пользовательских данных Google с сервера по идентификатору ID

Я пытаюсь получить мою голову вокруг следующий:

знаков Мобильного пользователя приложения в на приложении, используя один из следующих вариантов:

  • Google
  • Facebook
  • и т. д.

Сначала я сосредоточусь на Google, работа входа (пользователь соглашается на разрешение). Затем приложение извлекает токен: GoogleAuthUtil.getToken(mActivity, mEmail, mScope); Где область будет иметь вид audience:server:client_id:XXXXXX И XXXXXXX является client_id моего веб-сервиса.

(мобильное приложение также зарегистрирован на консоли Google, и это в том же проекте, как веб-сервер)

Затем приложение посылает извлеченный маркер на мой веб-сервер, где сервер может получить полезную нагрузку, используя $client->verifyIdToken($id_token);. Мой сервер использует Google API Client.

Но теперь я хочу использовать это, чтобы сервер извлекал пользовательские данные из Google, не запрашивая у пользователя дополнительные разрешения (поскольку они уже предоставили приложению разрешения). Итак, как мне получить полезную нагрузку для запроса пользовательских данных из Google?

Я все еще развлекаю мысль о том, что я могу полностью не понимать весь этот процесс Oauth2.0/SSO, поэтому любые указатели глубоко оценены!

ответ

0

только пользовательские данные вы получаете с audience:server:client_id:XXXXXX сферу является адрес электронной почты пользователя, который является email поле в формате JSON закодированные $id_token вы получили на вашем веб-сервере (this blog post имеет эквиваленты Java/Ruby, я предполагаю, что есть подобный вспомогательная функция для PHP).

Если вам нужны дополнительные пользовательские данные за пределами их адреса электронной почты, вам необходимо запросить дополнительную область, такую ​​как один из Google+ API Scopes или унаследованный Google Profile API Scope.

+0

Сообщение в блоге, которое вы упомянули, указывает на решение PHP также (полностью внизу), это тот, который я использую. Если я сгенерирую токен с другими областями, как вы упомянули, мой веб-сервер не сможет обработать токен: «Ошибка при получении маркера доступа Oauth2: неавторизованный клиент». Или мне нужна область, например 'oauth2: https: //www.googleapis.com/auth/userinfo.profile аудитория: server: client_id: XXXXXX'? Вы очень благодарны за помощь! –

+0

Использование обеих областей дает ошибку 'INVALID_SCOPE', я думаю, что моя основная проблема заключается в том, что я не совсем понимаю, как происходит взаимодействие между приложением и сервером. Правильно ли я предполагаю, что приложение получает токен от Google, встроенный с некоторыми разрешениями, отправляет его на сервер, а сервер использует токен для выполнения разрешенных действий? –

+0

Если вы используете несколько областей, вы разделяете их пробелом (только с 'oauth2:' перед первым) в вашем вызове 'GoogleAuthUtil.getToken' в соответствии с http://android-developers.blogspot.com/ 2012/09/google-play-services-and-oauth-identity.html Следует отметить, что область «аудитория: сервер: клиент_ид» не требует какого-либо взаимодействия с пользователем, но для всех других областей требуется авторизация и разрешение пользователя диалог (ы). Ссылка в этом комментарии также проходит через этот процесс. – ianhanniballake

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