Spring 云网关 Oauth2 资源服务器允许执行器端点

Spring Cloud Gateway Oauth2 Resource Server allow actuator endpoints

我有一个 Spring 云网关 运行 这个依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>

并在 main 方法中使用此注释:

@EnableWebFluxSecurity

在我的属性文件中我有这些属性:

spring.security.oauth2.resourceserver.jwt.issuer-uri=http://keycloak/realms/dpse-realm
spring.security.oauth2.resourceserver.jwt.jwk-set-uri=http://keycloak/realms/dpse-realm/protocol/openid-connect/certs

当我在上面执行此操作时,每个转到网关的调用都需要具有由 keycloak 服务器颁发的有效 JWT 令牌。

我的问题是调用执行器端点时如何避免安全问题。

此时健康检查需要token。

我试图找到一个 属性 或其他方法而不是创建 @Bean 或 @Configuration class。

但是,至少,我的特定问题的正确答案是:

@EnableWebFluxSecurity
public class SecurityConfiguration {

    private final WebEndpointProperties webEndpointProperties;

    public SecurityConfiguration(
            WebEndpointProperties webEndpointProperties) {
        this.webEndpointProperties = webEndpointProperties;
    }

    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {

        http.csrf()
            .disable()
            .authorizeExchange()
            .pathMatchers(webEndpointProperties.getBasePath() + "/health/**",
                    "/" + webEndpointProperties.getBasePath() + "/info/**")
            .permitAll()
            .and()
            .authorizeExchange()
            .anyExchange()
            .authenticated()
            .and()
            .oauth2ResourceServer()
            .jwt();
        return http.build();
    }
}

现在允许执行器端点被允许,其他调用必须使用令牌进行身份验证。