После аутентификации на сервере авторизации OAuth2, который поддерживает OpenID с использованием response_type=code
с scope=openid email
, конечная точка вызывающего токена должна вернуть id_token
.
Мне не хватает того, должен ли этот id_token
содержать email
или нет - и в этом случае клиент должен вызывать userInfo
конечную точку.
В спецификации говорится:
http://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims
Утверждения, запрошенные значениями профиля, электронной почты, адреса и телефона, возвращаются из конечной точки UserInfo, как описано в Разделе 5.3.2, когда используется значение response_type, которое приводит к выдаче токена доступа. Однако, когда токен доступа не выдается (что имеет место для значения response_type id_token), результирующие утверждения возвращаются в токене идентификатора.
Насколько я понимаю, это означает, что id_token
не обязательно содержать email
, если access_token
доступен, поскольку для его получения нужно вызвать userInfo
. Однако, глядя на реализацию клиента oidc в https://github.com/bitly/oauth2_proxy, кажется они действительно требуют, чтобы email
заявление было доступно внутри id_token
без вызова userInfo
конечной точки.
Как правильно работает сервер авторизации, совместимый с OpenID?