当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot中Zuul代理oAuth2未经授权

曹和正
2023-03-14

我有一个名为country-service的微服务,它使用oAuth2受到保护。当我直接向该服务发送请求(包括我的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代理似乎可以工作。

有人知道我在这里做错了什么吗?

共有1个答案

翟兴邦
2023-03-14

这与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;
    }
}
 类似资料:
  • 我试图在Spring Boot的工作流程中实现上述架构。 Web客户端通过Zuul Proxy向资源服务器(微服务endpoint)发出请求。 Zuul Proxy重定向到oaust2服务器进行身份验证。 如果请求是否经过身份验证,Oau2将重定向到Zuul Proxy。 如果未通过身份验证,Zuul会使用未经身份验证的响应重定向Web客户端。 如果经过身份验证,Zull代理会重定向到请求的微服务

  • 我想控制运行在Eureka服务器中的微服务。我为此使用了spring-boot-admin,但我在访问关于跟踪、日志等的信息时遇到了错误... 我得到的错误是 同样的事情也发生在所有endpoint上,比如映射,env和所有接受健康

  • 产品-服务:具有受保护路由的简单下游服务 jwt-resoure-server:当包含在下游服务中时,使其成为提取jwt令牌并将其设置在安全contex中的资源服务器的jar。 尤里卡-服务:发现服务 zuul-server:边缘服务器 Okta是我的auth服务器 我已经将oauth grant类型设置为be-Authorization code(我知道对于spa来说,建议使用隐式grant类型

  • 我对以下涉及oauth2的流程有一些问题: webapp1.xyz.com是具有授权代码授予类型的注册客户端,以下是当前流程: 用户登录并使用授权码重定向到webapp1.xyz.com webapp1.xyz.com交换访问令牌的授权代码并将其存储到会话 webapp1.xyz.com服务器端需要通过传递访问令牌调用webapp2.xyz.com api webapp1.xyz.com具有SPA

  • 我有这样的回应,当谈到检查用户未经授权。 有没有可能从未经授权的响应中删除路径?因为它没有为用户提供有价值的信息 }

  • 我正在尝试通过Linkedin Auth2从java web应用程序进行连接: null “client_id”和“client_secret”是我应用程序上的“客户端API”和“秘密API”。 第一个和第二个请求之间的时间少于20秒。