Вход Spring OAuth2 с прокси-сервером https возвращается к http

Этот вопрос задавался в аналогичной форме в прошлом, но не для версий, которые я использую сейчас, плюс я пробовал то, что они все упоминали, и, похоже, это не сработало.

У меня есть веб-приложение Java 11, Spring 5.3, Spring Boot 2.7.9, Spring Sec 5.7.7, упакованное как WAR, развернутое на сервере веб-приложений Wildfly 15, а также я использую Apache httpd. Домашняя страница https://reactrax.com использует ProxyPass и ProxyPassReverse для общения с Wildfly. В приложении пользователи аутентифицируются с помощью OAuth2 и Google. Однако после авторизации страница возвращается на http://reactrax.com:8080/loginSuccess. Обратите внимание, что теперь это http вместо https, и был добавлен порт Wildfly.

Как сделать так, чтобы страница входа просто перенаправляла обратно на исходную страницу предварительного входа на https://reactrax.com?

Изменения, которые я видел, включают следующее, но я не смог найти волшебную комбинацию, чтобы все это работало.

Апач:

  • RequestHeader устанавливает X-Forwarded-Proto https
  • RequestHeader устанавливает X-Forwarded-Port 443
  • ProxyPreserveHost включен

Свойства пружины:

  • server.use-forward-headers=true (устарел в Spring Boot 2.2 в пользу server.forward-headers-strategy)
  • server.forward-headers-strategy = родной
  • server.tomcat.remote-ip-header=x-forwarded-for
  • server.tomcat.protocol-header=x-forwarded-proto

Весенние бобы:

  • ForwardedHeaderFilter

Вы пытались использовать любой порт, кроме 8080, для своего приложения Spring с входом в систему? В реализациях весенних сервлетов во многих местах используется PortMapperImpl, и он ведет себя неестественным для меня образом, когда задействованы https и порт 8080 (или 80). Вы также можете попробовать использовать абсолютные URI для всего, что связано с входом в систему (страница входа, URI после входа и т. д.), но это менее просто.

ch4mp 02.04.2023 08:32

Помните, что это работает в Wildfly, поэтому Wildfly прослушивает 8080 и просто пересылает запросы моему приложению. Я настроил свое приложение как корневое приложение в Wildfly.

Gary Kephart 02.04.2023 18:41

и на каком порту работает ваше приложение?

ch4mp 02.04.2023 23:18

Не указан порт. Он работает в Wildfly, и контекстный путь моего приложения, а не порт, отличает его от других возможных веб-приложений, развернутых в Wildfly.

Gary Kephart 03.04.2023 09:26

Я понимаю. Что, если вы запустите Wildfly на любом другом порту, кроме 8080 (например, 8081)?

ch4mp 03.04.2023 18:16

Я не могу. У меня есть несколько других веб-приложений, работающих на этом Wildfly, и это может помешать их доступу. Из любопытства, что я должен был искать, если я изменил номер порта?

Gary Kephart 04.04.2023 03:51

Это заставляет меня задуматься о проблеме, о которой я сообщал там: github.com/spring-projects/spring-security/issues/12307 (также может быть из-за поведения PortMapperImpl). Вы можете взглянуть на другую альтернативу, о которой я упоминал в своем последнем комментарии: использование абсолютных URI для всего, что связано с входом в систему (там я дал полезные советы)

ch4mp 04.04.2023 04:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В конце концов я бросил всю кухонную раковину на проблему, и в конце концов это сработало, но я не уверен, какая часть этого заставила это сработать. :(

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