#java #spring #spring-boot #spring-security #spring-security-oauth2
#java #spring #spring-boot #spring-security #spring-security-oauth2
Вопрос:
Мы развертываем наш API в контейнере docker за шлюзом. Все, что находится за шлюзом, является http, а не https. В результате, когда Spring Security пытается перенаправить пользователя на Uri авторизации, он делает это на http, который выдает 404. (потому что, когда перенаправление попадает в браузер пользователя, браузер не может найти его по http, только по https)
Я не смог найти, где происходит это перенаправление. Например, если пользователь переходит на https://thecompany.com/securedpage
, и Spring Security видит, что он не аутентифицирован (нет JWT), некоторый код затем перенаправит на /oauth2/authorization/{regsitrationId}
.
Я нашел, где выполняется разрешение ( OAuth2AuthorizationRequestRedirectWebFilter.filter(ServerWebExchange exchange, WebFilterChain chain)
но, похоже, я не могу найти, где происходит перенаправление. Я прошел весь путь по цепочке файлов безопасности, но даже в последнем из них в ответе на перенаправление не было заголовка, равно как и статуса 302
.
Как я могу переопределить перенаправление для принудительного применения https?
Комментарии:
1. Какой шлюз вы используете? Эту проблему должен решить шлюз, а не сервер приложений.
2. Используете ли вы WebFlux?
3. @NatFar да, я использую webflux
Ответ №1:
Вы следовали главе «Настройка прокси-сервера» из документации spring security для настройки вашего шлюза?
Вам необходимо уведомить ваше приложение об этой конфигурации (https -> gateway -> http -> your_app), установив заголовки X-Forwarded и настроив ForwardedHeaderFilter в вашем приложении