Безопасность Spring REST: включить обычную проверку подлинности только на определенной конечной точке

Я настроил Spring Security для своего REST API (с HeaderHttpSessionStrategy).

Моя реализация WebSecurityConfigurerAdapter выглядит следующим образом.

@Override
    protected void configure(HttpSecurity http) throws Exception {

        http

            .csrf().disable()

            .authorizeRequests()
                .antMatchers("/user/**").authenticated()
                .antMatchers("/**").permitAll()

                .and()
            .requestCache()
                .requestCache(new NullRequestCache())
                .and()

            .httpBasic()
            ;

    }

Теперь, как я могу настроить объект HttpSecurity, чтобы обычная проверка подлинности была возможна только с определенной конечной точкой.

Например:

/ user / login: обычная аутентификация должна быть возможна только на этой конечной точке. После успешной аутентификации возвращается заголовок x-auth-token.

/ user / create: клиент не должен иметь возможность аутентифицироваться на этой конечной точке. Должен возвращать только 401. Доступ к нему возможен только с помощью 'x-auth-token', созданного с помощью конечной точки / user / login.


person Ashika Umanga Umagiliya    schedule 11.11.2016    source источник


Ответы (2)


Вы можете определить несколько WebSecurityConfigurerAdapter. Один с более высоким приоритетом, у которого есть сопоставитель запросов для ограничения применимости /user/login, например: http.requestMatcher(new AntPathRequestMatcher("/user/login")), а другой - в качестве универсального для остальных. Вы можете опустить requestMatcher, чтобы определение http не ограничивалось.

person sofiaguyang    schedule 11.11.2016

Вы всегда должны определять ограничения от конкретных до общих. В вашем случае это должны быть конкретные проверки URL-адресов для общих проверок безопасности.

  1. Вы должны настроить и разрешить URL-адреса для входа / регистрации.
  2. Вам следует избегать шаблона / **, чтобы разрешить все. вместо этого настройте статический URL-адрес ресурса отдельно.
  3. Наконец, вам следует применить более общее ограничение, такое как вы упомянули в URL-адресе / user / **, чтобы пройти аутентификацию и иметь некоторые роли.

      @Override
      protected void configure(HttpSecurity http) throws Exception {
    
    http
    .csrf().disable()
    .authorizeRequests()
    .antMatchers("/user/login, /user/signup, /logout").permitAll()
    .antMatchers("/user/**").hasRole("ADMIN")
    .and()
    .requestCache()
    .requestCache(new NullRequestCache())
    .and()
    
        .httpBasic();
    

    }

person ScanQR    schedule 11.11.2016