Spring Security permitAll не работает в приложении Spring Cloud + Keycloak(OAuth2)

Я хочу разрешить неавторизованным пользователям делать get-запросы к моему api.

Мой SecurityConfig (в api-gateway)

@Configuration
@EnableWebFluxSecurity
public class SecurityConfig {

    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity serverHttpSecurity){
        serverHttpSecurity.cors(ServerHttpSecurity.CorsSpec::disable)
                .csrf(ServerHttpSecurity.CsrfSpec::disable)
                .authorizeExchange(exchange -> exchange
                        .pathMatchers("/eureka/**")
                        .permitAll()
                        .pathMatchers(HttpMethod.GET, "/api/**")
                        .permitAll()
                        .anyExchange()
                        .authenticated())
                .oauth2ResourceServer((oauth2) -> oauth2
                        .jwt(Customizer.withDefaults())
                );
        return serverHttpSecurity.build();
    }
}

api-gateway properties:

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka
spring.application.name=api-gateway

logging.level.root=INFO
logging.level.org.springframework.cloud.gateway.route.RouteDefinitionLocator = INFO
logging.level.org.springframework.cloud.gateway = TRACE
spring.main.web-application-type=reactive
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 

#Book Service Route
spring.cloud.gateway.routes[0].id=book-service
spring.cloud.gateway.routes[0].uri=lb://book-service
spring.cloud.gateway.routes[0].predicates[0]=Path=/api/book

#Library Service Route
spring.cloud.gateway.routes[1].id=library-service
spring.cloud.gateway.routes[1].uri=lb://library-service
spring.cloud.gateway.routes[1].predicates[0]=Path=/api/note

#Discovery Server Route
spring.cloud.gateway.routes[2].id=discovery-server
spring.cloud.gateway.routes[2].uri=http://localhost:8761/
spring.cloud.gateway.routes[2].predicates[0]=Path=/eureka/web
spring.cloud.gateway.routes[2].filters[0]=SetPath=/

#Discovery Server Static Resources (CSS, etc) Route
spring.cloud.gateway.routes[3].id=discovery-server
spring.cloud.gateway.routes[3].uri=http://localhost:8761/
spring.cloud.gateway.routes[3].predicates[0]=Path=/eureka/**

#Security
spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:8181/realms/microservices-realm

Все работает отлично, если я прикрепляю access_token к запросу. Однако любой запрос (даже тот, который я пометил как permitAll), который выполняется пользователем без аутентификации возвращает 401. Я пытался добавить отдельный Spring Security в мои микросервисы, однако это не дало эффекта.


Ответы (0 шт):