Authorization header not passed by ZuulProxy starting with Brixton.RC1

匿名 (未验证) 提交于 2019-12-03 09:14:57

问题:

In switching from Spring Cloud Brixton.M5 to Brixton.RC1 my ZuulProxy no longer passes Authorization headers downstream to my proxied services.

There's various actors in play in my setup, but most all of them are fairly simple: - AuthorizationServer: runs separately; hands out JWTs to clients - Clients: get JWTs from OAuth server; each with access to a subset of resources. - ResourceServers: consume JWTs for access decisions - MyZuulProxy: proxies various resource servers; should relay JWTs.

It should be noted that MyZuulProxy has no security dependencies whatsoever; It passed the Authorization: Bearer {JWT} header it receives to the ResourceServers, pre-RC1. MyZuulProxy is explicitly not a Client itself, and does not use @EnableOAuth2SSO or similar at the moment.

What could I do to get MyZuulProxy to relay the JWTs to the ResourceServers again when using Spring Cloud Brixton.RC1?

There's very little code to post: It's just @EnableZuulProxy, @EnableAuthorizationServer and @EnableResourceServer in three different jars. My Clients are not Spring applications.

回答1:

Update: Fixed in https://github.com/spring-cloud/spring-cloud-netflix/pull/963/files

Sensitive headers can also be set globally setting zuul.sensitiveHeaders. If sensitiveHeaders is set on a route, this will override the global sensitiveHeaders setting.

So use:

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

So pending a fix for https://github.com/spring-cloud/spring-cloud-netflix/issues/944, jebeaudet was kind enough to provide a workaround:

@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; } } 


回答2:

Set the sensitiveHeaders globally helped me solve the issue

 zuul:   sensitiveHeaders: Cookie,Set-Cookie 

Please note that the property name is sensitiveHeaders not sensitive-headers [I use spring-cloud-starter-zuul version:1.3.1.RELEASE ]



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!