簡體   English   中英

ShareSecurityContext 如何在 Spring Cloud 中使用 Hystrix 工作?

[英]How does shareSecurityContext work in Spring Cloud with Hystrix?

我正在學習 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 之類的標題。

所以這是我的問題:如果第二個服務在其他 docker 容器或其他服務器上運行,是否可以使用 Zuul 和 Feign 傳輸安全上下文? 如果不是,傳輸有關授權用戶的數據的最佳實踐是什么?

謝謝!

自從您發布問題以來已經 8 個月了,但無論如何我都會回答。 如您所知,服務本質上是分布式的,因此它們可能不共享 JVM,甚至可能根本不是用 Java 開發的。 JWT 令牌的目的是保護此類分布式服務,因此它們之間發生的有關安全性的任何通信都僅通過授權標頭發生。 在授權標頭中,一個服務將 JWT 令牌(僅承載)傳遞給其他服務,該服務驗證令牌,從中讀取信息,等等。 然而 hystrix.shareContext 有另一個目的。 在 Spring 中,當創建應用程序上下文時,默認情況下它不會將其傳遞給 Hystrix 線程。 為了使其可用於 Hystrix,此屬性設置為 true,這從本質上改變了 hystrix 的並發策略。 因此,它將安全上下文傳遞給“Hystrix 的線程”,它是同一服務的一部分,而不是其他服務的一部分。

希望這能解決您的疑問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM