Схема аутентификации Spring с использованием заголовка аутентификации

#spring-boot #authentication #web #spring-security #webhooks

#spring-boot #аутентификация #веб #spring-безопасность #webhooks

Вопрос:

Я использую приложение spring boot, и у меня настроен адаптер конфигурации веб-безопасности для аутентификации каждого запроса с использованием jwt.

Я хочу расширить свой сервис, чтобы разрешить аутентификацию другой конечной точки api с использованием заголовка. Одна из служб, с которой я интегрируюсь, отправляет веб-хук, и все, что он отправляет, — это запрос с пользовательским заголовком, который я настроил для включения. Как я могу настроить определенную конечную точку для аутентификации только с использованием пользовательского заголовка?

Ответ №1:

Вы могли бы использовать a OncePerRequestFilter для фильтрации запросов к этой конечной точке и возврата 401, если они не содержат вашего заголовка с правильным значением.

Вы бы определили свой фильтр:

 public class HeaderSecurityFilter extends OncePerRequestFilter {
    
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
        String value = request.getHeader("Token");
        if(value == null || !value.equals("Secret")) {
            response.sendError(401);
            return;
        }

        chain.doFilter(request, response);
    }
}
 

А затем зарегистрируйте его:

 @Configuration
public class HeaderSecurityConfiguration {
    @Bean
    FilterRegistrationBean<HeaderSecurityFilter> filterRegistration() {
        FilterRegistrationBean<HeaderSecurityFilter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new HeaderSecurityFilter());
        registration.addUrlPatterns("/some/path/*");
        return registration;
    }
}
 

Для чего потребуется, чтобы заголовок Token присутствовал со значением Secret для чего-либо ниже /some/path/* .

Вам также необходимо будет убедиться в своей конфигурации oauth, к которой вы открываете доступ /some/path/* .