【问题标题】: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/* 的访问权限。