В настоящее время я использую Authorisation Code Flow openid connect весной, который является режимом по умолчанию. В этом режиме используется тип ответа code, и я получаю access_token и id_token. Так что здесь все в порядке.
Но когда я пытаюсь использовать Implicit Flow, устанавливая authorizationGrantType=implicit, используется тип ответа token, и я получаю только access_token. Это отражает Запрос авторизации - часть спецификации OAuth 2.0. Более того, значение token для типа ответа, похоже, не используется Спецификация OpenId Connect:

Итак, какова цель неявного режима в Spring open id connect?





NOTE: While OAuth 2.0 also defines the token Response Type value for the Implicit Flow, OpenID Connect does not use this Response Type, since no ID Token would be returned.
Как указано в спецификации OpenID Connect, response_type = токен не является допустимым типом ответа для OpenID Connect. Итак, вы наблюдаете возврат к OAuth 2.0 и, следовательно, получение токена доступа.
Я не исхожу из фона Spring, но вы должны иметь возможность определять / настраивать соответствующие значения response_type из своего кода. Если это не так, вам просто повезло с наблюдением за потоком кода авторизации. В зависимости от конфигурации / предпочтений сервера авторизации он может отправлять токен идентификатора. Например, Azure AD отправляет токен идентификатора для Предоставление кода OAuth 2.0
В Spring безопасности невозможно определить или настроить response_type. Тип ответа определяется параметром authorizationGrantType, который может принимать только два значения: authorization_code или implicit. В первом случае - response_type=code, а во втором - response_type=token. Мне кажется невероятным (забавным?), Что Azure AD возвращает id_token в гранте кода OAut 2.0. Действительно, id_token никогда не появляется в Спецификация OAut 2.0. Не могу представить, что бесперебойная работа этого потока зависит от взлома провайдера.
@Fabrice Я наткнулся на это - stackoverflow.com/questions/41208178/… может быть вам поможет. Что ж, независимо от спецификаций, на самом деле в реальном мире реализации OpenID Connect и OAuth 2 различаются от реализации к реализации.
Какую версию Spring вы используете? Кроме того, не могли бы вы дать фрагмент кода?