【问题标题】:Spring authentication scheme using the authentication header使用身份验证标头的 Spring 身份验证方案
【发布时间】:2021-04-28 01:45:17
【问题描述】:

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

我想扩展我的服务以允许使用标头对不同的 api 端点进行身份验证。我正在与之集成的服务之一发送一个网络挂钩,它发送的只是带有我设置为包含的自定义标头的请求。如何设置特定端点以仅使用自定义标头进行身份验证?

【问题讨论】:

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


    【解决方案1】:

    您可以使用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;
        }
    }
    

    对于/some/path/* 下的任何内容,这将要求Token 的标头具有Secret 的值。

    您还需要确保通过您的 oauth 配置打开对 /some/path/* 的访问权限。

    【讨论】:

      猜你喜欢
      • 2015-09-09
      • 2019-02-21
      • 1970-01-01
      • 2019-09-20
      • 2019-06-19
      • 2021-09-26
      • 2015-03-07
      • 1970-01-01
      • 2018-05-04
      相关资源
      最近更新 更多