Как установить AuthorizationRequestCustomizer на DefaultOAuth2AuthorizationRequestResolver?

При попытке заставить Spring Security OAuth2 5.4.2 работать с настраиваемыми областями и Auth0 в потоке кода авторизации. Я наткнулся на небольшую деталь, для которой у меня нет простого решения.

Чтобы запросить настраиваемые области действия, Auth0 требует, чтобы пользователь предоставил параметр audience . URI перенаправления создается в org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizationRequestResolver#resolve(javax.servlet.http.HttpServletRequest, java.lang.String, java.lang.String).

Этот процесс можно изменить с помощью AuthorizationRequestCustomizer, однако я не вижу никаких средств для внедрения настройщика, а DefaultOAuth2AuthorizationRequestResolver не зарегистрирован как bean-компонент или, по крайней мере, я не понимаю, как он доступен.

Не могли бы вы предоставить больше информации о проблеме? Я знаю, нет проблем с настройкой Auth0 в Spring Security.

ActivX 12.12.2020 15:20

Это довольно просто воспроизвести: попробуйте получить доступ к пользовательской области, созданной для API, настроенного в Auth0, например. что-л. например, «создать: проекты». Теперь попробуйте использовать эту область через поток кода авторизации. Это не сработает, поскольку для Auth0 требуется параметр запроса &audience=<<api_name>>, который Spring Security не может предоставить без AuthorizationRequestCustomizer исправления запроса. Проблема не в том, что я не могу настроить Auth0, а в том, что я не могу использовать настраиваемые области.

Andreas 12.12.2020 19:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
2
812
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете реализовать собственный OAuth2AuthorizationRequestResolver, а затем добавить его в конфигурацию безопасности spring.

.oauth2Login(req->
          req.authorizationEndpoint()
         .authorizationRequestResolver(new YourCustomAuthorizationRequestResolver)
 )

К сожалению, это не простой способ просто установить AuthorizationRequestCustomizer, вместо этого мне пришлось заменить весь authorizationRequestResolver, получив ClientRegistrationRepository и базовый URI запроса авторизации. С параметризованным DefaultOAuth2AuthorizationRequestResolver с использованием authorizationRequestResolver.setAuthorizationRequestCustomiz‌​er(b -> b.additionalParameters(Map.of("audience", "http://localhost:8080/")));

Andreas 14.12.2020 13:18

Другие вопросы по теме