Как использовать Spring Security для защиты конечных точек привода, но не мешать другим URL-адресам приложений? Механизм безопасности в нашем приложении обрабатывается другой структурой, поэтому я хотел бы отключить Spring Security по умолчанию и включить его только для конечных точек /actuator/.
Для этого я добавил в класс инициализации следующее.
@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })
При этом конфигурация по умолчанию Spring Security отключена. Какие изменения мне нужно внести после этого, чтобы настроить безопасность конечных точек привода?
Для актуатора больше нет отдельного контекста.
Предполагается, что до тех пор, пока конечные точки, не являющиеся исполнительными механизмами, не нуждаются в ограничениях безопасности, следующая конфигурация будет работать.
@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().requestMatchers(EndpointRequest.toAnyEndpoint()).authenticated().anyRequest().permitAll()
.and().formLogin();
}
}
EndpointRequest обрабатывает сопоставление с любой конечной точкой Actuator, предоставляя форму входа в систему для тестирования. Обратите внимание, что даже /info и /health защищены. EndpointRequest имеет больше возможностей для детализации; кроме того, в Spring Boot 2 по умолчанию включены только info и health.
Или вы можете просто защитить пути за любым механизмом безопасности, который вы используете для других своих API.
Я разместил здесь пример приложения,
https://github.com/DarrenForsythe/secure-spring-actuator-only
Вы можете использовать приведенный ниже код и конфигурации
application.properties
spring.security.user.name=user
spring.security.user.password=password
spring.security.user.roles=ENDPOINT_ADMIN
Защита конечных точек исполнительного механизма
import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
* @author dpoddar
*
*/
@Configuration
@EnableWebSecurity
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.requestMatchers(EndpointRequest.to("health", "flyway","info")).permitAll()
.requestMatchers(EndpointRequest.toAnyEndpoint()).hasRole("ENDPOINT_ADMIN")
.and()
.httpBasic()
;
}
}
при использовании этой конфигурации, когда я пытаюсь получить доступ к "/actuator/hystrix.stream", мне предлагается бесконечно входить в систему. Я имею в виду, что если я введу правильный пароль пользователя: и нажму ENTER, мне будет предложено войти снова ... как я могу отладить базовую аутентификацию?
Работай на меня. Создаю образец на github со всеми CI / CD от Travis-ci: github.com/NoraUi/noraui-datas-webservices
Конечные точки исполнительных механизмов доступны через
EndpointRequest.class, оттуда вы можете применить свою политику безопасности. И я предлагаю вам разрешить автоконфигурацию безопасности и просто настроить ее.