Как обезопасить конечные точки привода с ролью в Spring Boot 2? - PullRequest
4 голосов
/ 13 мая 2019

Можете ли вы помочь защитить конечные точки привода в Spring Boot 2?Я проверил руководство по миграции, но оно мне не помогает.

Вот моя конфигурация безопасности:

@Configuration
@EnableWebSecurity
public class SecConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .requestMatchers(EndpointRequest.toAnyEndpoint()).hasRole("ADMIN")    
                .anyRequest().authenticated();
    }

}

, но когда я перехожу на http://localhost:8080/actuator/health, он загружается без входа в систему.Другие конечные точки с префиксом /actuator также не требуют входа в систему.Что я сделал не так?

Я тоже добавляю OAuth с этой конфигурацией:

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
    @Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    clients
            .inMemory()
                .withClient("client-id")
                    .scopes("read", "write")
                    .authorizedGrantTypes("password")
                    .secret("xxxxxx")
                    .accessTokenValiditySeconds(6000);
}
}

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
       http
            .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
            .authorizeRequests()
                .antMatchers("/ajax/**").authenticated()
                .and()
            .csrf()
                .disable();
    }
}

Ответы [ 2 ]

3 голосов
/ 16 мая 2019

Если ваше приложение является сервером ресурсов, вам не нужен класс SecConfig.

Так что, если вы удалите его, в своем классе ResourceServerConfig вы можете защитить исполнительные механизмы и просто пропустить администратора через:

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
       http
            .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
            .authorizeRequests()
                .antMatchers("/ajax/**").authenticated()           
                .antMatchers("/actuator/**").hasRole("ADMIN")  
                .anyRequest().authenticated()  
                .and()
            .csrf()
                .disable();
    }
}

Я добавляю .anyRequest().authenticated() для защиты остальных конечных точек приложения.

0 голосов
/ 16 мая 2019

вы можете попробовать ниже конфигурации

@Configuration
public class SecConfig extends WebSecurityConfigurerAdapter {

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

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

spring.security.user.name=user
spring.security.user.password=pass
spring.security.user.roles=ACTUATOR,USER   # or any other role 
management.endpoint.health.roles=ACTUATOR
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...