ZuulProxy 未通过以 Brixton.RC1 开头的授权标头

从Spring Cloud切换到我的ZuulProxy不再将下游的标头传递给我的代理服务。Brixton.M5Brixton.RC1Authorization

在我的设置中,有各种各样的参与者在起作用,但大多数都相当简单: - 授权服务器:单独运行;将JWT分发给客户端 - 客户端:从OAuth服务器获取JWT;每个都有权访问一部分资源。- 资源服务器:使用JWT进行访问决策 - MyZuulProxy:代理各种资源服务器;应中继 JWT。

应该注意的是,MyZuulProxy没有任何安全依赖关系;它将收到的标头传递给资源服务器,在 RC1 之前。MyZuulProxy本身显然不是客户端,目前不使用或类似用户。Authorization: Bearer {JWT}@EnableOAuth2SSO

在使用Spring Cloud Brixton.RC1时,我能做些什么来让MyZuulProxy再次将JWT中继到ResourceServers?

要发布的代码很少:它只是,并且在三个不同的罐子中。我的客户不是弹簧应用。@EnableZuulProxy@EnableAuthorizationServer@EnableResourceServer


答案 1

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

敏感标头也可以全局设置 。如果在路由上设置了 ,这将覆盖全局设置。zuul.sensitiveHeaderssensitiveHeaderssensitiveHeaders

所以使用:

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

答案 2

设置敏感头全球帮我解决了问题

 zuul:
  sensitiveHeaders: Cookie,Set-Cookie

请注意,属性名称是 sensitiveHeaders not sensitive-headers [我使用 spring-cloud-starter-zuul 版本:1.3.1.RELEASE ]


推荐