Обеспечение безопасности каждого микросервиса - PullRequest
1 голос
/ 14 июля 2020

У меня есть два микросервиса, которые должны общаться друг с другом. Мой пример: микросервис A делает запрос к микросервису B. Пользователи не должны иметь доступа, только другие микросервисы. Я подумал, что этим решением может быть «Http Basi c Authentication», поэтому микросервис A также должен отправлять имя пользователя и пароль в микросервис B. Это нормально, но как микросервис A должен узнать это имя пользователя и пароль? Я использую Eureka как службу обнаружения, но я не нашел ничего, что могло бы мне помочь в этом случае. Я нашел только eureka.client.proxy-user-name и eureka.client.proxy-password, но у меня это не сработало.

1 Ответ

0 голосов
/ 30 июля 2020
  1. Извлечь заголовок авторизации из запроса в микросервис A, добавить этот заголовок в заголовок HTTP и сделать запрос в микросервис B. Spring Security проверит заголовок и разрешит аутентификацию

    private WebClient client = null;
    
    @PostConstruct
    public void init() {
        client = WebClient.builder().baseUrl("some-url").build();
    }
    
    @GetMapping("/getCandidateById/{institutionId}/{id}")
    public Mono<Candidate> getCandidateById(@PathVariable String institutionId, @PathVariable String id, ServerHttpRequest request) {
            return client.get()
                    .uri("/getCandidateById/{institutionId}/{id}", institutionId, id)
                    /*main logic*/.header("Authorization", request.getHeaders().getFirst("Authorization"))
                    .retrieve()
                    .bodyToMono(Candidate.class);
    }
    

Я извлекаю заголовок и добавляю его в запрос, который я делаю с помощью WebClient. Аналогичным образом вы также можете использовать RestTemplate.

Примечание: я использовал Basi c Authentication

...