Как настроить аутентификациюEntryPoint для поведения Spring Security - PullRequest
0 голосов
/ 24 мая 2019

У меня есть шлюз безопасности на основе Spring Boot 2, выполняющий аутентификацию OAuth2, сидящий перед приложением GUI и серверной частью. Он настроен как

@Configuration
@EnableOAuth2Client
@EnableWebSecurity
public class SecurityGatewayConfig extends WebSecurityConfigurerAdapter{

    @Bean
    public SecurityGatewayAuthenticationFilter filter() {
        return new SecurityGatewayAuthenticationFilter("/login");
    }

    @Override
    public void configure(HttpSecurity http) {
        http
                .addFilterAfter(new OAuth2ClientContextFilter(), AbstractPreAuthenticatedProcessingFilter.class)
                .addFilterAfter(filter(), OAuth2ClientContextFilter.class)
                .httpBasic().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login"))
                .and()
...

Перенаправляет запросы на /login, а SecurityGatewayAuthenticationFilter выполняет аутентификацию для внешнего поставщика OAuth2.

Это хорошо для приложения GIU. Однако при доступе к внутренним службам (они имеют / api / в пути), мне нужно другое поведение: если запрос не аутентифицирован, не перенаправлять, а сразу возвращать ошибку 401 .

Есть идеи, как настроить Spring Security для этого?

Ответы [ 2 ]

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

вам нужно добавить фильтр точек входа

`@ Компонентный открытый финальный класс CustomAuthenticationEntryPoint реализует AuthenticationEntryPoint { @Override public void начало (окончательный запрос HttpServletRequest, окончательный HttpServletResponse response, final AuthenticationException authException) выдает IOException { response.sendError (HttpServletResponse.SC_UNAUTHORIZED, «Несанкционированный»); } } Когда клиент обращается к ресурсам без аутентификации ...

`

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

Если я правильно понял ваши вопросы, то вы можете работать с различными адаптерами конфигурации.Основная идея выглядит следующим образом:

    @Order(1)
    @Configuration
    @EnableOAuth2Sso
    public static class SecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {

        @Autowired
        @Qualifier("defaultMatcher")
        private RequestMatcher defaultMatcher;

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

            http.requestMatcher(defaultMatcher)...
        }
    }

    @Order(2)
    @Configuration
    public static class OtherConfigurationAdapter extends WebSecurityConfigurerAdapter {

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.requestMatcher(yourRequestMatcher())...
        }

    }



Spring будет оценивать каждый запрос в порядке, который вы добавляете с помощью Order (), если вы используете @EnableResourceServer, у него всегда будет Order (3)

YouЗатем вы можете построить свои средства сопоставления запросов в следующем примере (в этом примере он сопоставляет все, но явно исключает некоторые другие):

    @Bean
    public RequestMatcher defaultMatcher(@Qualifier("apiMatcher") RequestMatcher api, @Qualifier("anyother") RequestMatcher anyother) {
        final RequestMatcher all = new AntPathRequestMatcher("/**");
        final RequestMatcher nonApi = new NegatedRequestMatcher(new OrRequestMatcher(api, anyother));

        return new AndRequestMatcher(all, nonApi);
    }

Надеюсь, что это поможет.

С наилучшими пожеланиями, WiPu

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