[英]Zuul proxy oAuth2 Unauthorized in Spring Boot
我有一個使用oAuth2保護的微服務,稱為country-service。 當我直接向包含我的JWT持票人令牌的服務發送請求時,一切正常:
server:
port: 8081
spring:
database:
driverClassName: org.postgresql.Driver
datasource:
url: jdbc:postgresql://localhost:5432/vue-boot-country
username: postgres
password: postgres
jpa:
hibernate:
ddl-auto: validate
database-platform: org.hibernate.dialect.PostgreSQLDialect
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
我也有一個api-gateway(Zuul代理):
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class VueBootApiGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(VueBootApiGatewayApplication.class, args);
}
}
沒有其他文件比這兩個
server:
port: 8765
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
zuul:
routes:
vue-boot-country-service: /api/country/**
add-proxy-headers: true
我無法向代理發送成功請求,我不斷收到“未經授權”錯誤:
注意:當我從資源服務器中刪除oAuth2安全性時,Zuul代理似乎可以工作。
有人知道我在做錯了嗎?
這與zuuls所謂的“敏感”標題有關,比如“授權”。 對於傳遞給內部的所有請求,這些都被過濾了......
我不知道,如果設置標頭已經在使用此配置:
zuul:
ignoredHeaders:
- authorization
如果沒有,您可以定義一個Zuul過濾器bean來手動管理它:
@Component
public class RelayTokenFilter extends ZuulFilter{
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 10000;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
RequestContext context = RequestContext.getCurrentContext();
@SuppressWarnings("unchecked") Set<String> ignoredHeaders = (Set<String>) context.get("ignoredHeaders");
ignoredHeaders.remove("authorization");
return null;
}
}
我遇到了同樣的問題。 令牌不通過Zuul傳遞給微服務的地方。 所以我補充道
zuul: sensitiveHeaders: Cookie,Set-Cookie
希望它可能對某人有用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.