Как shareSecurityContext работает в Spring Cloud с Hystrix? - PullRequest
0 голосов
/ 02 марта 2020

Я изучаю, как работает Spring Cloud, и использую для этого один из самых популярных технических стеков: Eureka, Zuul, Hystrix, Ribbon, Feign. За исключением реестра, сервера конфигурации и шлюза, мои службы имеют следующие зависимости с Spring Cloud версии 2.2.1.RELEASE:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
    <version>${spring-cloud.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>${spring-cloud.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
    <version>${spring-cloud.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>${spring-cloud.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    <version>${spring-cloud.version}</version>
</dependency>

Я делаю авторизацию с JWT на шлюзе и хочу использовать тот же объект авторизации на другом Сервисы. Очевидный способ сделать это - передать мой JWT с заголовком, но я прочитал в документах, что Hystrix может распространять весь контекст безопасности с помощью только одного свойства hystrix.shareSecurityContext = true . Я пытался сделать это с Feign Client и Zuul, но SecurityContext в запрошенном сервисе содержит только anonymousUser.

Я потратил два дня, чтобы понять, как это работает, но я этого не сделал. В журналах Feign я не вижу никаких заголовков с чем-то вроде Principal.

Итак, вот мой вопрос: возможно ли передать контекст безопасности с Zuul и Feign, если вторая служба работает в другом контейнере docker или на другом сервере? Если нет, то как лучше всего передавать данные об авторизованном пользователе?

Спасибо!

...