通过Spring Cloud Gateway公开公共和私有端点

qpgpyjmq  于 2023-06-05  发布在  Spring
关注(0)|答案(1)|浏览(243)

我正在使用Spring Cloud Gateway作为我的基础设施的入口点。网关配置有密钥斗篷,以通过以下配置验证身份验证报头

spring:
  security:
    oauth2:
      resource-server:
        jwt:
          jwk-set-uri: https://httpd.keycloak.local:443/keycloak/realms/myRealm/protocol/openid-connect/certs

路由示例如下

spring:
  cloud:
    gateway:
      routes:
        - id: my-route
          uri: http://service.local:8020
          predicates:
            - Path=/myPath/api/myRoute/test
          filters:
            - name: StripPrefix
              args:
                parts: 2

我如何在yml文件中定义这个路由public和另一个通过jwk-uri认证指向keycloak的路由?

oknwwptz

oknwwptz1#

我在spring-cloud-gateway configuration doc中没有看到任何安全规则。
我想你要么:

  • 让所有流量通过网关,并处理每个服务安全性
  • 编写一个web安全配置类并定义一个SecurityWebFilterChain bean。
  • 使用spring-addons-webflux-jwt-resource-server从属性定义permitAll()路由(其他路由需要用户进行身份验证)

只有最后一个解决方案只适用于yaml文件配置:在pom中,将spring-boot-starter-oauth2-resource-server替换为

<dependency>
            <groupId>com.c4-soft.springaddons</groupId>
            <artifactId>spring-addons-webflux-jwt-resource-server</artifactId>
            <version>${com.c4-soft.springaddons.version}</version>
        </dependency>

在yaml中,将spring.security.oauth2.resource-server替换为

com.c4-soft.springaddons.security:
  jwt-issuers:
    - location: https://httpd.keycloak.local:443/keycloak/realms/myRealm
  permit-all:
    - /myPath/api/myRoute/test
    - /public/**

请注意,在没有有效授权的情况下尝试访问“非公共”路由将导致401(未授权)而不是302(重定向到登录)。在我看来,客户端应该不确定对受保护路由的请求是否使用Authorization报头发出,或者通过重定向到授权服务器并重试来处理未经授权的请求。
还要注意,spring-security-oauth2-webflux-addons将自动配置不仅仅是允许所有路由(例如CORS,CSRF和权限Map)。
最后,我还没有用spring-cloud-gateway尝试过。请告诉我进展如何;- )

相关问题