我正在尝试使用zuul过滤器修改请求标头“授权”,但它没有发送已修改的标头,而是发送了从客户端收到的原始标头值。
我能够修改非敏感的自定义标头值,并看到zuul将其转发到下游服务。
authToken = getAuthToken(serviceResourceId);
String accessToken = "Bearer " + authToken;
ctx.addZuulRequestHeader("Authorization", accessToken);
我已禁用授权作为敏感标题
zuul:
sensitiveHeaders: Cookie,Set-Cookie
routes:
compute-client:
path: /client/**
serviceId: clinet
compute-service:
path: /service/**
serviceId: service
Zuul没有将上述修改后的Authorization标头发送到下游服务。它总是发送从请求中收到的原始Authorization标头。
我发现它会修改任何其他自定义标头,并将修改后的值发送给下游服务。
版本:
springBootVersion = '2.0.3.RELEASE'
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:Finchley.RELEASE"
}
}
compile 'org.springframework.cloud:spring-cloud-starter-netflix-zuul'
我的其他发现是:
1)我已在网关服务上启用OAuth2,并且我正在授权标头中发送承载令牌以对网关服务进行身份验证,然后要根据正在谈论的下游服务对其进行修改。在这种情况下,下游服务会收到原始令牌,该令牌已发送到身份验证到网关服务
2)如果我禁用了网关服务的OAuth2并发送了承载令牌(现在不执行任何操作)并根据下游服务对其进行了修改,则下游服务会接收到已修改的令牌。
第一个场景就是问题,其中令牌已经用于身份验证,需要为下游服务进行修改。