【问题标题】:Authorization header not passed by ZuulProxy starting with Brixton.RC1以 Brixton.RC1 开头的 ZuulProxy 未传递授权标头
【发布时间】:2016-07-21 11:19:34
【问题描述】:

在从 Spring Cloud Brixton.M5 切换到 Brixton.RC1 时,我的 ZuulProxy 不再将 Authorization 标头下游传递给我的代理服务。

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

需要注意的是,MyZuulProxy 没有任何安全依赖;它将收到的Authorization: Bearer {JWT} 标头传递给 ResourceServers,pre-RC1。 MyZuulProxy 本身明确不是客户端,目前不使用@EnableOAuth2SSO 或类似名称。

当使用 Spring Cloud Brixton.RC1 时,如何让 MyZuulProxy 再次将 JWT 中继到 ResourceServers?

要发布的代码很少:只有@EnableZuulProxy@EnableAuthorizationServer@EnableResourceServer 在三个不同的 jar 中。我的客户不是 Spring 应用程序。

【问题讨论】:

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


    【解决方案1】:

    更新:已在 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;
        }
    }
    

    【讨论】:

    • zuul 配置确实解决了我的问题。未在微服务中调用自定义身份验证提供程序。非常感谢!
    • 我试过这个,但我知道它应该如何工作,我希望在我的重定向应用程序中收到标题授权,但我没有得到它......不能似乎让我的应用程序发送标题甚至在 yml 存档中添加这个 zuul 配置..help
    【解决方案2】:

    全局设置sensitiveHeaders帮助我解决了问题

     zuul:
      sensitiveHeaders: Cookie,Set-Cookie
    

    请注意,属性名称是sensitiveHeaders 不是 sensitive-headers 【我用的是spring-cloud-starter-zuul版本:1.3.1.RELEASE】

    【讨论】:

      猜你喜欢
      • 2020-05-10
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 2011-04-07
      • 2014-01-01
      相关资源
      最近更新 更多