使用rewritePath和token relay保护Spring GW路由

wh6knrhe  于 2024-01-06  发布在  Spring
关注(0)|答案(1)|浏览(212)

我有一个K8S应用程序与Keycloak,SpringGW和后端服务作为资源服务.
现在,它可以在没有authn的情况下工作,但我想使用autz代码流将authn添加到它。
问题是:这是我的API gw中的customRouteLocator,我如何修改它以便添加tokenRelay过滤器?

  1. @EnableWebFluxSecurity
  2. @EnableDiscoveryClient
  3. @SpringBootApplication
  4. public class Application {
  5. public static void main(String[] args) {
  6. SpringApplication.run(Application.class, args);
  7. }
  8. @Bean
  9. public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
  10. return builder.routes()
  11. .route("product-service", r -> r.path("/webapi/products/**")
  12. .filters(f -> f.rewritePath("/webapi/(?<segment>.*)", "/api/v1/${segment}"))
  13. .uri("lb://product-service"))
  14. .route("order-service", r -> r.path("/webapi/orders/**")
  15. .filters(f -> f.rewritePath("/webapi/(?<segment>.*)", "/api/v1/${segment}"))
  16. .uri("lb://order-service"))
  17. .build();
  18. }
  19. }

字符串

4c8rllxm

4c8rllxm1#

您需要将Spring Cloud Gateway设置为oauth2客户端。

部门:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-oauth2-client</artifactId>
  4. </dependency>

字符串
在application.yaml中将网关定义为OAuth2客户端:

  1. spring:
  2. security:
  3. oauth2:
  4. client:
  5. provider:
  6. keycloak:
  7. issuer-uri: http://[url-to-issuer-in-keycloak]
  8. registration:
  9. gateway:
  10. provider: keycloak
  11. client-id: gateway
  12. client-secret: <CLIENT SECRET>
  13. scope: openid


安全链:

  1. @Configuration
  2. @EnableWebSecurity
  3. public class OAuth2LoginSecurityConfig {
  4. @Bean
  5. public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
  6. http
  7. .authorizeHttpRequests(authorize -> authorize
  8. .anyRequest().authenticated()
  9. )
  10. .oauth2Login(withDefaults());
  11. return http.build();
  12. }
  13. }


之后,您可以将token-relay过滤器应用于所有路由。不幸的是,使用编程方法来定义路由,您必须手动将token-relay过滤器应用于所有路由。yaml方法提供了一种可能性,可以定义一次应用于所有路由的默认过滤器:

  1. spring:
  2. cloud:
  3. gateway:
  4. default-filters:
  5. - TokenRelay

展开查看全部

相关问题