У меня есть приложение Reactive Spring Boot, которое отвечает за маршрутизацию запросов к нисходящим сервисам, используя Spring Cloud Gateway (то есть это API-шлюз). Приложение имеет некоторые конечные точки привода, которые необходимо защитить, поэтому я хочу использовать для этого просто простую защиту, такую как basi c auth.
Я хотел бы настроить приложение, чтобы запрашивать запросы Авторизация /actuator/refresh
с использованием аутентификации basi c (с настроенным пользователем и паролем безопасности Spring). Все запросы к другим конечным точкам, , даже если они включают basi c auth , необходимо передавать только в нисходящую службу.
Моя текущая конфигурация безопасности Spring:
@Bean
@Order(1)
SecurityWebFilterChain securityWebFilterChain(final ServerHttpSecurity http) {
http.authorizeExchange(exchanges -> {
exchanges.matchers(EndpointRequest.toAnyEndpoint().excluding(HealthEndpoint.class, InfoEndpoint.class)).hasRole("ACTUATOR"); // requires Http Basic Auth
});
http.httpBasic(withDefaults()); // if not enabled, you cannot get the ACTUATOR role
return http.build();
}
@Bean
@Order(2)
SecurityWebFilterChain permitAllWebFilterChain(final ServerHttpSecurity http) {
http.authorizeExchange(exchanges -> exchanges.anyExchange().permitAll()); // allow unauthenticated access to any endpoint (other than secured actuator endpoints?)
http.httpBasic(ServerHttpSecurity.HttpBasicSpec::disable); // disable Http Basic Auth for all other endpoints
return http.build();
}
Запрос, предназначенный для нисходящего сервиса, не распространяется шлюзом API. Служба весенней загрузки возвращает 401 в этой настройке, в то время как ожидается / требуется 200.
Есть идеи, почему эта конфигурация не работает / как ее следует настроить в противном случае?