使用身份验证标头的 Spring 身份验证方案

时间:2021-01-23 21:37:43

标签: spring-boot authentication web spring-security webhooks

我正在使用 Spring Boot 应用程序,并且我设置了一个网络安全配置适配器来使用 jwt 对每个请求进行身份验证。

我想扩展我的服务以允许使用标头对不同的 api 端点进行身份验证。我正在集成的其中一项服务发送一个 Web 钩子,它发送的所有内容都是带有我设置为包含的自定义标头的请求。如何将特定端点设置为仅使用自定义标头进行身份验证?

1 个答案:

答案 0 :(得分:0)

您可以使用 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/* 的访问。