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

时间:2016-04-01 15:15:34

标签: java spring-cloud spring-security-oauth2 spring-cloud-netflix

从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应用程序。

2 个答案:

答案 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]