Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ZuulProxy未从Brixton.RC1开始传递授权标头_Java_Spring Cloud_Spring Security Oauth2_Spring Cloud Netflix - Fatal编程技术网

Java ZuulProxy未从Brixton.RC1开始传递授权标头

Java 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没有任

在从Spring Cloud
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]