Безопасность дорожек в Spring Security 5 - PullRequest
0 голосов
/ 20 сентября 2018

Использование org.springframework.security:spring-security-oauth2-resource-server5.1.0.RC2 (через org.springframework.boot: spring-boot-starter-security: 2.1.0.M3) Я пытаюсьвключите защиту для некоторых путей http, но отключите ее для других, используя защиту токенов на основе JWT.

Я пробовал следующее, но это противоречиво обеспечивало безопасность для различных путей и методов http:

  • Принудительно для GET / учетных записей? Имя = Проверка
  • Принудительно для POST / учетных записей
  • Не применяется для GET / клиентов? Имя = Джон
  • Принудительно для POST / клиентов

Почему он будет применяться на POST для / клиентов?

@Configuration
public class SecurityConfig {

    @Autowired
    private ReactiveJwtDecoder jwtDecoder;

    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
        // @formatter:off
        http
            .authorizeExchange().pathMatchers("/customers").permitAll()
                .and()
            .authorizeExchange().pathMatchers("/customers/**").permitAll()
                .and()
            .authorizeExchange().pathMatchers("/accounts/**").authenticated()
                .and()
            .oauth2ResourceServer()
                .jwt().jwtDecoder(this.jwtDecoder);
        // @formatter:on

        return http.build();
   }

}

1 Ответ

0 голосов
/ 20 сентября 2018

Я частично решил это с помощью двух вещей:

  1. Добавлен csrf (). Disable () (может, это нормально, так как это REST-сервисы без состояния?)
  2. До того, как я былотправка заголовка авторизации на запросы, где я упоминал, что аутентификация была принудительной.Я думал, что он пропустил бы авторизацию, даже с заголовком, но все равно обработал.

Обновленный код:

    @Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
    // @formatter:off
    http
        .csrf()
            .disable()
        .authorizeExchange().pathMatchers("/customers/**").permitAll()
            .and()
        .authorizeExchange().pathMatchers("/accounts/**").authenticated()
            .and()
        .oauth2ResourceServer()
            .jwt().jwtDecoder(this.jwtDecoder);

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