Не удается получить всю информацию о профиле при проверке подлинности токена Google.

Я использую omniauth на стороне клиента для подключения к учетной записи Google. Все работает хорошо, я могу получить id_token и некоторую дополнительную информацию, такую ​​как электронная почта, имя, family_name, named_name и т. д.

Вот как я настроил провайдера в app/config/initializer/omniauth.rb:

provider :google_oauth2, ENV['GOOGLE_ID'], ENV['GOOGLE_SECRET'], scope: "profile,email"

Затем, в качестве теста, чтобы проверить подлинность id_token, с помощью Postman я отправляю запрос POST, такой как:

https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=x

замена x на id_token, который я получил на своем клиенте

Я получаю правильный ответ, например:

{
  "iss": "accounts.google.com",
  "at_hash": "xxx-xxx",
  "aud": "xxx-xxx.apps.googleusercontent.com",
  "sub": "xxx",
  "email_verified": "true",
  "azp": "xxx-xxx.apps.googleusercontent.com",
  "email": "[email protected]",
  "iat": "xxx",
  "exp": "xxx",
  "alg": "xxx",
  "kid": "xxx"
}

Когда я подключился к своему клиенту, я разрешил приложению доступ к информации моего профиля и моей электронной почте, и я следовал этому уроку:

https://developers.google.com/identity/sign-in/web/backend-auth

кто говорит :

 // These seven fields are only included when the user has granted the "profile" and
 // "email" OAuth scopes to the application.
 "email": "[email protected]",
 "email_verified": "true",
 "name" : "Test User",
 "picture": "https://lh4.googleusercontent.com/-kYgzyAWpZzJ/ABCDEFGHI/AAAJKLMNOP/tIXL9Ir44LE/s99-c/photo.jpg",
 "given_name": "Test",
 "family_name": "User",
 "locale": "en"

Я не могу понять, почему я не могу получить 5 последних полей

Я работаю над API, и я хотел бы, чтобы мой API мог сам заполнить модель пользователя, только получив id_token. Я могу получить эту информацию на стороне клиента, но я думаю, что это не работа клиента по отправке этой дополнительной информации в мой API, верно?


person Charrette    schedule 04.03.2016    source источник
comment
какие 5 полей вы не получаете? не могли бы вы опубликовать хэш параметров?   -  person toddmetheny    schedule 19.03.2016
comment
Я не получаю имя, изображение, данное_имя, имя_семьи и регион. Я не уверен, что понимаю, что вы хотите, нет хэша параметров, единственный параметр, который я предоставляю, это id_token   -  person Charrette    schedule 20.03.2016
comment
Я правильно понимаю ваш вопрос? : вы можете получить информацию о профиле в браузере, но не на стороне сервера с библиотекой OmniAuth. Если да, то как настроить конечные точки API для использования OAuth? Я не знаком с OmniAuth.   -  person agektmr    schedule 06.06.2016
comment
Я говорю про API, но проблема не здесь, серверную часть этой фичи я еще не писал. Пока не работает проверка id_token не пишу. Но это может быть проблема с OmniAuth на стороне клиента, где я устанавливаю провайдера в app/config/initializer/omniauth.rb, просто кажется, что он не учитывает область профиля.   -  person Charrette    schedule 06.06.2016
comment
Как работает клиентская часть? Вы используете библиотеку Google Sign-In?   -  person agektmr    schedule 08.06.2016
comment
Да под гем omniauth-google-oauth2. @quest нашел решение, похоже, я просто использовал не тот URL.   -  person Charrette    schedule 08.06.2016


Ответы (2)


Вызовы токенов не включают информацию о профиле... для этого вы можете использовать:

https://www.googleapis.com/plus/v1/people/me/openIdConnect?access_token=YOUR_ACCESS_TOKEN

person quest    schedule 07.06.2016

Поскольку вы делаете это с ruby, я могу предложить попробовать две вещи:

  1. Попробуйте добавить свои области в виде массива ["профиль", "электронная почта"]
  2. Добавьте дополнительный параметр fetch_basic_profile из здесь
person Abs    schedule 21.03.2016
comment
Спасибо за ваш ответ, но я только что попробовал оба ваших предложения, и результат тот же:/ - person Charrette; 21.03.2016