java - ZuulProxy 未通过以 Brixton.RC1 开头的授权 header

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

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

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

需要注意的是,MyZuulProxy 没有任何安全依赖;它将接收到的 Authorization: Bearer {JWT} header 传递给 RC1 之前的 ResourceServers。 MyZuulProxy 本身显然不是客户端,目前不使用 @EnableOAuth2SSO 或类似的东西。

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

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

最佳答案

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

Sensitive headers can also be set globally setting zuul.sensitiveHeaders. If sensitiveHeaders is set on a route, this will override the global sensitiveHeaders setting.

所以使用:

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

关于java - ZuulProxy 未通过以 Brixton.RC1 开头的授权 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36359915/

相关文章:

spring - 更改 Spring Cloud Config 的路径

java - 停用监听器

java - 获取线和形状的交点

spring-boot - 升级到 Spring Boot 2.4.0 打破传统应用

Spring oauth2 hasRole 访问被拒绝

java - 禁用/启用 OAuth2,无需两个安全配置

spring-boot - 使用 Spring Boot 的 Oauth2 身份验证

java - spring boot oauth2管理httpbasic认证

java - 如何通过 Oracle 函数 to_date() 将 java 格式的 ddMMyyyyHmmss 字符串转换为日期?

java - 错误的 SQLite 错误?代码14