我有一个REST服务,使用Java、Spring Boot构建,并使用Basic Access Authentication的Spring Security。没有视图、JSP等,也没有“登录”,只有可以从单独托管的React应用程序中调用的无状态服务。
我阅读了各种有关CSRF保护的文档,但无法确定是否应该使用spring-security CSRF配置,还是禁用它?如果我禁用csrf保护,我可以像这样使用基本身份验证调用curl服务:
curl -H "authorization:Basic c35sdfsdfjpzYzB0dDFzaHA=" -H "content-type:application/json" -d '{"username":"user","password":"password","roles":"USER"}' localhost:8081/api/v1/user
如果我启用了CSRF保护并提供了一个"x-csrf-token"头,则Spring CsrfFilter会尝试将其与HttpServletRequest中的(我认为是)会话cookie中的值进行交叉检查。然而,由于它是一个无状态REST服务,我没有会话,也没有登录。我有一个看起来像这样的配置类:@EnableWebSecurity
@Configuration
public class ServiceSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().fullyAuthenticated()
.and().httpBasic();
if (!serviceProperties.isCsrfEnabled()) {
http.csrf().disable();
}
}
我越想,似乎只需要禁用CSRF保护。有没有其他配置Spring Security的方法可以让它正常工作?
谢谢