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

2024-05-25

从 Spring Cloud 切换时Brixton.M5 to Brixton.RC1我的 ZuulProxy 不再通过Authorization标头下游到我的代理服务。

我的设置中有各种各样的角色,但大多数都相当简单: - AuthorizationServer:单独运行;向客户分发 JWT - 客户端:从 OAuth 服务器获取 JWT;每个都可以访问一部分资源。 - ResourceServers:使用 JWT 进行访问决策 - MyZuulProxy:代理各种资源服务器;应该中继 JWT。

应该注意的是,MyZuulProxy 没有任何安全依赖性;它通过了Authorization: Bearer {JWT}它接收到资源服务器的标头,RC1 之前的版本。 MyZuulProxy 本身显然不是客户端,并且不使用@EnableOAuth2SSO或目前类似的情况。

使用 Spring Cloud Brixton.RC1 时,我该怎么做才能让 MyZuulProxy 再次将 JWT 中继到资源服务器?

需要发布的代码很少:只是@EnableZuulProxy, @EnableAuthorizationServer and @EnableResourceServer在三个不同的罐子里。我的客户端不是 Spring 应用程序。


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

敏感标头也可以全局设置zuul.sensitiveHeaders. If sensitiveHeaders在路线上设置,这将覆盖全局sensitiveHeaders环境。

So use:

# Pass Authorization header downstream
zuul:
  sensitiveHeaders: Cookie,Set-Cookie

所以等待修复https://github.com/spring-cloud/spring-cloud-netflix/issues/944 https://github.com/spring-cloud/spring-cloud-netflix/issues/944, 热博代 https://stackoverflow.com/users/1303612/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;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Brixton.RC1 开始的 ZuulProxy 未传递授权标头 的相关文章

随机推荐