Безопасность JWT в Spring Boot Microservices - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть приложение Spring Boot, которое очень близко к работе, за исключением самой важной части. По сути, установка четырех микросервисов (есть несколько других, но четыре для целей этого вопроса).

  • реестр сервисов: реестр сервисов Eureka
  • шлюз: сервис Zuul Gateway, через который обмениваются данными все остальные сервисы,
  • security: простой сервис с логином веб-страница и реализует аутентификацию JWT
  • web: простое веб-приложение, которое отображает контент, который пользователь должен авторизовать для просмотра

То, что я пытаюсь выполнить sh, - это иметь конфигурацию безопасности, которая проверяет действительный токен jwt и, если не найден, переходит на пользовательскую страницу входа.

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

Я могу показать страницу входа через шлюз с: http://localhost: 8080 / security / login и это выглядит хорошо. Но когда я пытаюсь перейти на страницу в веб-микросервисе: http://localhost: 8080 / web / page , я ожидаю, что меня перенаправят на http://localhost: 8080 / security / login , но вместо этого я вижу эту страницу: http://173.7.8.9: 8081 / security / login . Я составил IP-адрес, но это мой назначенный IP-адрес из моей сети.

Моя конфигурация безопасности выглядит следующим образом:

   @Override
   protected void configure(HttpSecurity http) throws Exception {
      http.authorizeRequests()
            .requestMatchers().permitAll()

            // All other requests are authenticated
            .anyRequest().authenticated()

            .and()

            .addFilterAfter(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class)

            .formLogin()
            .loginPage("/security/login");
   }

Я думал, что эта установка будет работать, потому что я попытка получить доступ к пути безопасности / входа в систему относительно того же сервера и порта, что и запрошенная веб-страница. Веб-страница по адресу http://localhost: 8080 / web / page , а страница входа по адресу http://localhost: 8080 / security / login , тот же сервер и порт, но разные пути. Но что-то в моей настройке вызывает замену сервера и порта шлюза реальным сервером и портом страницы входа в систему безопасности, и мне нужно, чтобы это прекратилось.

Есть идеи?

1 Ответ

0 голосов
/ 13 февраля 2020

Хорошо, я думаю, у меня это есть. Я обновил свой проект, чтобы отразить изменение. Проблема в том, что конфигурация безопасности (как, я думаю, имеет в виду Джеймс выше) находится в веб-модуле. Я переместил его на шлюз, чтобы при пересылке на страницу входа порт и сервер оставались неизменными. Я все еще могу перейти на страницу входа в любой модуль, который выберу, но настройки безопасности должны быть применены к самому шлюзу.

Последняя версия моего примера проекта работает так, как задумано: github.com/scottellis64 / микро

...