Как разрешить определенную конечную точку в весенней безопасности без аутентификации? - PullRequest
0 голосов
/ 10 октября 2018

У меня есть веб-приложение Spring Boot Rest API, в котором я использую Spring Security, чтобы большинство конечных точек требовали аутентификации.Это часть кода:

public class SecurityConfig extends WebSecurityConfigurerAdapter {
....
@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .requestMatchers()
                .antMatchers("/oauth/token")
                .and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .antMatchers(HttpMethod.OPTIONS).permitAll()
                .anyRequest().authenticated();
    }

Может кто-нибудь объяснить, что означает каждая строка, начинающаяся с http.csrf?

Как я могу изменить приведенный выше код, чтобы enpoint / bars / pk можно былоразрешен доступ без проверки подлинности, как если бы не было Spring Security?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Вот полный пример:

 httpSecurity.authorizeRequests()
                    .antMatchers(HttpMethod.GET)                  
                    .permitAll() // Allow all GET requests to go unauthenticated
                    .antMatchers(allowedResources)                  
                    .permitAll() // Allow all requests to go unauthenticated for the specified paths
                    .antMatchers(protectedResources).hasRole(USER)
                    .antMatchers(adminResources).hasRole(ADMIN)
                    .anyRequest().authenticated(); // Authenticate all other request paths
0 голосов
/ 10 октября 2018

По умолчанию Spring Boot активирует защиту от CSRF-атаки (атака подделки межсайтовых запросов).Атака состоит из вредоносного сайта, использующего преимущества того, что пользователь уже прошел аутентификацию на сайте (например, в банке), чтобы обманом заставить пользователя выполнять действия на этом сайте (например, перевод средств).

Защита отатака состоит в том, что приложение Spring Boot отправляет токен с каждым ответом и ожидает, что токен будет отправлен клиентом при последующем запросе.Если токен не получен, Spring Boot возвращает ошибку.

Иногда вы хотите отключить это поведение (на свой страх и риск), поэтому вы используете csrf.disable.Возможно, вам будет удобно отключить защиту csrf, если вы разрабатываете API без сохранения состояния, и у вас нет возможности связать запрос POST с любыми предыдущими запросами или сеансом.Но опять же, вы должны тщательно обдумать это и аргументировать.

Обратите внимание, что защита CSRF не влияет на запросы GET.Он влияет только на запросы изменения состояния (например, POST, DELETE)

Чтобы разрешить передачу ваших конечных точек кому-либо, не требуя никакой аутентификации, вам необходимо использовать

http.authorizeRequests ().antMatchers ("/ **"). allowAll ();

РЕДАКТИРОВАТЬ

Специально разрешать несанкционированные запросы на /bars/pk и сохранять другие элементыбез изменений измените код следующим образом:

http.csrf().disable()
                .requestMatchers()
                .antMatchers("/oauth/token")
                .and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .antMatchers(HttpMethod.OPTIONS).permitAll()
                .antMatchers("/bars/pk").permitAll()
                .anyRequest().authenticated();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...