从Spring Cloud Brixton.M5
切换到Brixton.RC1
时,我的ZuulProxy不再将Authorization
标头下游传递给我的代理服务。
我的设置中有各种各样的演员,但大多数演员都非常简单: - AuthorizationServer:单独运行;向客户发放JWT - 客户:从OAuth服务器获取JWT;每个人都可以访问一部分资源。 - ResourceServers:使用JWT进行访问决策 - MyZuulProxy:代理各种资源服务器;应该转发JWT。
应该注意的是,MyZuulProxy没有任何安全依赖性;它将它收到的Authorization: Bearer {JWT}
标头传递给Resource Server之前的RC1。 MyZuulProxy显然不是客户端本身,目前不使用@EnableOAuth2SSO
或类似内容。
使用Spring Cloud Brixton.RC1时,如何让MyZuulProxy再次将JWT中继到ResourceServers?
发布的代码非常少:在三个不同的jar中只有@EnableZuulProxy
,@EnableAuthorizationServer
和@EnableResourceServer
。我的客户端不是Spring应用程序。
答案 0 :(得分:17)
更新:已修复https://github.com/spring-cloud/spring-cloud-netflix/pull/963/files
也可以全局设置敏感标头
zuul.sensitiveHeaders
。如果在路线上设置sensitiveHeaders
,则会覆盖全局sensitiveHeaders
设置。
所以使用:
# Pass Authorization header downstream
zuul:
sensitiveHeaders: 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;
}
}
答案 1 :(得分:9)
全局设置sensitiveHeaders帮助我解决问题
zuul:
sensitiveHeaders: Cookie,Set-Cookie
请注意,媒体资源名称为 sensitiveHeaders 而非 sensitive-headers [我使用spring-cloud-starter-zuul版本:1.3.1.RELEASE]