Как использовать микросервис, защищенный JWT, от другого микросервиса Java - PullRequest
0 голосов
/ 26 марта 2020

Мое приложение имеет несколько микросервисов, включая: Auth, Game и Group. Когда я нажимаю кнопку на передней панели (Play), я вызываю метод api Group rest, скажем, foo (). Чтобы реализовать foo () внутри группы, мне нужно GET вызвать Game rest api, но он защищен.

При входе в приложение React я получаю токен JWT из / login (Auth) и сохраняю его в LocalStorage. Затем я успешно использую его для вызова foo () из Group, но в реализации foo () мне также нужно использовать токен jwt, чтобы иметь возможность получать информацию из Game.

@Configuration
//+component scans...
public class GroupConfiguration {

    @Bean
    @LoadBalanced
    public WebClient.Builder buildWebClientBuilder() {

        return WebClient.builder();
    }
}


@RestController
@RequestMapping("/groups")
public class Controller {

    private final Logger logger = LogManager.getLogger();

    @Autowired
    private WebClient.Builder webClientBuilder;

private int getMinimumNumberOfPlayers(int gameId) {

        try {
            return webClientBuilder.build()
                    .get()
                    .uri("http://game-service/games/minimumNumberOfPlayers/2")
                    .retrieve()
                    .bodyToMono(Integer.class)
                    .block();
        } catch (NullPointerException|WebClientResponseException e) {
            e.printStackTrace();
            return 0;
        }
    }

...

// foo() frontend calls foo(). foo it's using getMinimumNumberOfPlayers


getMinimumNumberOfPlayers () используется в методе foo () из группы. Предполагается получить минимальное количество игроков в игре по идентификатору, но микросервис игры защищен jwt, и я получаю несанкционированную ошибку.

Поэтому мой вопрос заключается в том, как сделать так, чтобы микросервис группы мог вызывать Game микросервис.

Спасибо.

Редактировать: Перехватчик RestTemplate Вот как я это решил.

1 Ответ

1 голос
/ 26 марта 2020

Даже если у меня возникнут проблемы с безопасностью, я отвечу на этот вопрос:

Что вы можете сделать:

  1. добавить перехватчик для входящих вызовов в групповой службе, который будет сохраните JWT в request context.
  2. , добавьте перехватчик для исходящих вызовов к вашему игровому сервису, который получит JWT в request context и добавит его в заголовки запроса.

Что здесь важно, так это request context.

...