Java ZuulProxy未从Brixton.RC1开始传递授权标头
在从Spring CloudJava ZuulProxy未从Brixton.RC1开始传递授权标头,java,spring-cloud,spring-security-oauth2,spring-cloud-netflix,Java,Spring Cloud,Spring Security Oauth2,Spring Cloud Netflix,在从Spring CloudBrixton.M5切换到Brixton.RC1my ZuulProxy时,my ZuulProxy不再向my Proxy服务的下游传递授权头 在我的设置中有各种各样的演员,但大多数都相当简单: -授权服务器:单独运行;向客户分发JWT -客户端:从OAuth服务器获取JWTs;每个都可以访问资源的子集。 -ResourceServers:使用JWT进行访问决策 -MyZuulProxy:代理各种资源服务器;应该接力JWTs 应该注意的是,MyZuulProxy没有任
Brixton.M5
切换到Brixton.RC1
my ZuulProxy时,my ZuulProxy不再向my Proxy服务的下游传递授权
头
在我的设置中有各种各样的演员,但大多数都相当简单:
-授权服务器:单独运行;向客户分发JWT
-客户端:从OAuth服务器获取JWTs;每个都可以访问资源的子集。
-ResourceServers:使用JWT进行访问决策
-MyZuulProxy:代理各种资源服务器;应该接力JWTs
应该注意的是,MyZuulProxy没有任何安全依赖性;它将收到的Authorization:Bearer{JWT}
头传递给ResourceServers,即RC1之前的服务器。MyZuulProxy本身并不是一个客户机,目前也不使用@enableAuth2sso
或类似工具
在使用Spring Cloud Brixton.RC1时,如何让MyZuulProxy再次将JWT中继到ResourceServer
可以发布的代码很少:它只是三个不同的jar中的@EnableZuulProxy
、@EnableAuthorizationServer
和@EnableResourceServer
。我的客户端不是Spring应用程序。更新:已修复
还可以通过设置zuul.sensitiveHeaders
全局设置敏感标头。如果在路线上设置了sensitiveHeaders
,这将覆盖全局sensitiveHeaders
设置
因此,请使用:
# Pass Authorization header downstream
zuul:
sensitiveHeaders: Cookie,Set-Cookie
因此,在等待修复之前,我们提供了一个解决方案:
@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;
}
}
@组件
公共类RelayTokenFilter扩展了ZuulFilter{
@凌驾
公共对象运行(){
RequestContext ctx=RequestContext.getCurrentContext();
//根据以下内容更改被忽略的标题:https://gitter.im/spring-cloud/spring-cloud?at=56fea31f11ea211749c3ed22
Set headers=(Set)ctx.get(“ignoredHeaders”);
//我们需要我们的JWT令牌中继到资源服务器
标题。删除(“授权”);
返回null;
}
@凌驾
公共布尔值shouldFilter(){
返回true;
}
@凌驾
公共字符串筛选器类型(){
返回“pre”;
}
@凌驾
public int filterOrder(){
返回10000;
}
}
全局设置SensiveHeader有助于我解决问题
zuul:
sensitiveHeaders: Cookie,Set-Cookie
请注意,属性名称是敏感标题而不是敏感标题
[我使用SpringCloudStarterZuul版本:1.3.1.RELEASE]