Как поддерживать базовую c аутентификацию и аутентификацию носителя для проекта REST API - PullRequest
1 голос
/ 27 мая 2020

Я новичок в Spring Security и все еще изучаю его, поэтому мой вопрос может быть наивным, пожалуйста, смиритесь.

У меня есть проект Sprint Boot Rest API, который предоставляет определенные API. Я уже реализовал аутентификацию на основе токена-носителя для всех API. например, / пользователь, / ресурс, / встреча

Теперь для нескольких API для конкретного контроллера я хотел бы реализовать базовую c аутентификацию. Эти Apis будут использоваться другой службой, не связанной с publi c. Чтобы обеспечить безопасность API-интерфейсов, я хотел бы использовать базовую c аутентификацию для этих API. например, / internal / api1, internal / api2 .. и так далее

Я не могу различать URL-адреса в ResourceServerConfigurerAdapter и WebSecurityConfigurerAdapter . Также не уверен, что следует использовать для добавления basicAuth () с использованием antmatchers

1 Ответ

1 голос

Читая вашу задачу, вы хотите иметь два типа аутентификации (токен и httpBasi c) для двух разных конечных точек. Этого можно добиться, создав два разных bean-компонента WebSecurityConfigurerAdapter. Spring Boot позволяет это сделать, как показано ниже:

  • @ Order (1) - / resource | user | assign / ** защищено аутентификацией токена-носителя.
  • @ Order ( 2) - / internal / ** защищен базой c auth.

Просмотрите документы для Spring Boot и пример кода здесь .

   @EnableWebSecurity
   public class SecurityConfig {

    @Configuration
    @Order(1)
    public class ApiSecurityConfig extends WebSecurityConfigurerAdapter {

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .antMatcher("/resource/**")
                .antMatcher("/user/**")
                .antMatcher("/appointment/**")
                .authorizeRequests()
                    .anyRequest().authenticated()
                .and() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
    .and().addFilterBefore(jwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
        }
    }

    @Configuration
    @Order(2)
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.csrf().disable()
                .authorizeRequests()
                .antMatchers("/internal/**")
                .and()
                .httpBasic();
        }
    }

}
...