Защитите конечные точки Actuator с помощью имени пользователя и пароля, предоставляя открытый доступ для RestControllers - PullRequest
0 голосов
/ 04 мая 2018

Я обновил уже существующее приложение с Spring Boot 1.3 до 2.0.1. Это приложение использует Actuator и предоставляет API в стиле REST.

В Boot 1.3 API можно использовать без аутентификации, а конечная точка привода настроена для защиты паролем:

security.user.name=foo
security.user.password=bar
security-user.role=ADMIN

Я обновил это, как описано в журнале изменений конфигурации , и переименовал записи с security.user.name на spring.security.user.name и т. Д.

Но когда я пытаюсь curl мой API, мне отказывают, потому что я не предоставляю учетные данные: CURL is denied because unauthenticated access was tried

В Spring Blog Я нашел возможное решение, как настроить Spring Security на детальном уровне:

http
    .authorizeRequests()
        // 1
        .requestMatchers(EndpointRequest.to("status", "info"))
            .permitAll()
        // 2
        .requestMatchers(EndpointRequest.toAnyEndpoint())
            .hasRole("ACTUATOR")
        // 3 
        .requestMatchers(StaticResourceRequest.toCommonLocations())
            .permitAll()
        // 4
        .antMatchers("/**")
            .hasRole("USER")
    .and()
  ...

но это более детально, чем мне нужно, и я ищу решение на основе application.properties.

Есть ли способ решить эту проблему без дополнительного кода?

1 Ответ

0 голосов
/ 08 мая 2018

Когда вы устанавливаете spring.security.user.name и spring.security.user.password, вы конфигурируете вход в форму через spring-security для всего приложения, включая конечные точки привода.

К сожалению, в Spring Boot 2.0 вы не можете установить другое имя пользователя / пароль или отключить аутентификацию для конечных точек привода, используя свойства. Это означает, что вы должны явно разрешить конечные точки привода через конфигурацию безопасности.

Через spring-security вы также можете разрешить публичный доступ к вашим конечным точкам и очень легко запрашивать учетные данные для конечных точек привода:

@Configuration
public class BasicSecurityConfig extends WebSecurityConfigurerAdapter {

    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/actuator/**").hasRole("ACTUATOR")
                .anyRequest().permitAll();
    }
}

(я предполагал, что вы используете WebMvc, а не WebFlux, что немного отличается)

Убедитесь, что в application.properties имеется следующее:

spring.security.user.name=user
spring.security.user.password=pass
spring.security.user.roles=ACTUATOR,USER   # and others, if you like

management.endpoint.health.roles=ACTUATOR

См. здесь для быстрого и приятного объяснения различий между Actuator в Spring 1.x и 2.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...