Можно ли получить информацию о профиле в id_token от Google?
При использовании системы проверки подлинности Google OpenIDConnect можно указать email
или profile
или оба параметра scope
. Если вы запрашиваете область email
, заявки "email" и "email_verified" будут включены в id_token
, который будет возвращен как часть успешного сеанса аутентификации OAuth2.
Вот пример из документации Google:
Полезная нагрузка идентификатора ID
Маркер ID - это объект JSON, содержащий набор пар имя/значение. Вот пример, отформатированный для удобочитаемости:
{"iss":"accounts.google.com",
"at_hash":"HK6E_P6Dh8Y93mRNtsDB1Q",
"email_verified":"true",
"sub":"10769150350006150715113082367",
"azp":"1234987819200.apps.googleusercontent.com",
"email":"[email protected]",
"aud":"1234987819200.apps.googleusercontent.com",
"iat":1353601026,
"exp":1353604926,
"hd":"example.com"
}
Однако запрос области profile
, по-видимому, не влияет на содержимое id_token. Чтобы получить информацию о профиле, вы должны сделать отдельный HTTP-запрос для отдельной конечной точки (аутентифицированный с помощью access_token, который вы только что получили), чтобы получить документ, который выглядит очень похожим, но с дополнительной информацией:
{
"kind": "plus#personOpenIdConnect",
"gender": string,
"sub": string,
"name": string,
"given_name": string,
"family_name": string,
"profile": string,
"picture": string,
"email": string,
"email_verified": "true",
"locale": string,
"hd": string
}
В идеале я бы предпочел получить информацию о профиле (просто name
, фактически), включенную в id_token JWT, вместо того, чтобы делать отдельный вызов. Есть ли способ указать дополнительные поля и включить их в качестве претензий в id_token? Если нет, то почему email
обрабатывается специально и возвращается в id_token?
Ответы
Ответ 1
Начиная с сегодняшнего дня вы получите информацию о профиле при обмене кода на конечной точке маркера (т.е. с помощью "потока кода" ).
Как использовать: добавьте область profile
к вашему запросу и убедитесь, что вы используете конечные точки, совместимые с OpenID Connect (те, которые перечислены в https://accounts.google.com/.well-known/openid-configuration).
Ищите утверждения, такие как name
и picture
в этих ответах идентификатора идентификатора. Как и прежде, если область запроса email
находится в вашем запросе, идентификатор ID будет содержать сообщения, связанные с электронной почтой.
Когда вы обновляете токен доступа, каждый так часто ID-токен, который возвращается с новым токеном доступа, также будет содержать эти дополнительные претензии. Вы можете проверить эти поля, и если они присутствуют (и отличаются от того, что вы сохранили), обновите свой профиль пользователя. Это может быть полезно для обнаружения изменений имени или адреса электронной почты.
Ответ 2
Когда запрос создается с response_type=id_token
и профилем в области, подобной scope=openid+profile+email
, результирующий идентификатор должен содержать утверждения профиля непосредственно в нем.
Это в разделе раздела 5.4 спецификации OpenID Connect, в котором говорится: "... когда не установлен токен доступа (что имеет место для значения response_type
id_token
), полученные претензии возвращаются в токене идентификатора."
Однако, в небольшом тестировании, которое я сделал с их OAuth 2 Playground, Google, похоже, не ставит претензии профиля в токен идентификатора даже когда response_type=id_token
и токен доступа не выпущен. Я утверждаю, что это дефект реализации в части Google и, если не считать, что это исправление (или добавление поддержки "претензий" параметра запроса), похоже, нет способа выполнить то, что вы ищете.
Ответ 3
Ну, это подходящее место для запроса. Мы работаем над поддержкой этой функции и должны скоро ее выпустить (в ближайшие несколько недель). Затем я сделаю обновление для этого ответа.