0

從Spring Cloud Brixton.M5切換到Brixton.RC1時,我的ZuulProxy不再將Authorization標頭下游傳遞到我的代理服務。ZuulProxy從Brixton.RC1開始未通過授權標頭

在我的設置中,有各種各樣的演員參與其中,但大多數都非常簡單: - 授權服務器:單獨運行;將智威湯遜移交給客戶 - 客戶:從OAuth服務器獲取智威湯遜;每個都可以訪問資源的一個子集。 - ResourceServers:消費JWTs訪問決策 - MyZuulProxy:代理各種資源服務器;應該轉交JWTs。

應當指出的是,MyZuulProxy有沒有任何安全性依賴;它通過它收到的Authorization: Bearer {JWT}頭部到ResourceServers,pre-RC1。 MyZuulProxy明確不是客戶端本身,目前不使用@EnableOAuth2SSO或類似的。

我能做的使用Spring雲Brixton.RC1時候才能MyZuulProxy到JWTs再次轉發到ResourceServers?

有很少的代碼要發佈:它只是在三個不同的罐子裏的@EnableZuulProxy,@EnableAuthorizationServer@EnableResourceServer。我的客戶不是Spring應用程序。

回答

5

更新:在https://github.com/spring-cloud/spring-cloud-netflix/pull/963/files

敏感的頭部固定,也可設置統一設置zuul.sensitiveHeaders。如果在路線上設置了sensitiveHeaders,則這將覆蓋全局sensitiveHeaders設置。

所以使用:

# Pass Authorization header downstream 
zuul: 
    sensitive-headers: Cookie,Set-Cookie 

所以對於https://github.com/spring-cloud/spring-cloud-netflix/issues/944修復之前,jebeaudet是一種足以提供一個解決辦法:

@Component 
public class RelayTokenFilter extends ZuulFilter { 

@Override 
public Object run() { 
    RequestContext ctx = RequestContext.getCurrentContext(); 

    // Alter ignored headers as per: https://gitter.im/spring-cloud/spring-cloud?at=56fea31f11ea211749c3ed22 
    Set<String> headers = (Set<String>) ctx.get("ignoredHeaders"); 
    // We need our JWT tokens relayed to resource servers 
    headers.remove("authorization"); 

    return null; 
} 

@Override 
public boolean shouldFilter() { 
    return true; 
} 

@Override 
public String filterType() { 
    return "pre"; 
} 

@Override 
public int filterOrder() { 
    return 10000; 
} 
} 
+0

非常感謝!此解決方法完成其工作 –

1

設置sensitiveHeaders全球幫我解決問題

zuul: 
    sensitiveHeaders: Cookie,Set-Cookie 

請注意,屬性名是sensitiveHeaders敏感的報頭 [我用彈簧雲起動zuul版本:1.3.1.RELEASE]