我跟随导游来到这里:http://spring.io/guides/gs/rest-service/ 为了构建我的rest服务示例,现在我正在尝试启用csrf保护。我读到它应该在默认情况下启用,所以如果我不包括:
http.csrf().disable()
在我的 WebSecurityConfigurerAdapter
配置时,默认情况下应启用csrf保护,但情况似乎并非如此。问题是没有生成x-csrf-token,也没有以任何方式包含在我的http响应中。我应该怎么做,生成x-csrf-token并将其包含在响应中,当然,csrf保护完全工作?
我注意到,使用类似的spring mvc配置,生成的x-csrf-token只包括:
< security:csrf disabled=“假”/>
在我的安全配置文件中。但是,使用springboot可能我出了什么问题,并且没有办法生成csrf令牌。有人能帮我吗,也许能给我举一个有效的例子?我的安全配置是:
@Override
protected void configure(HttpSecurity http) throws Exception
{
http
// .csrf().disable()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.httpBasic()
.authenticationEntryPoint(new RestAuthenticationEntryPoint())
.and()
.formLogin()
.successHandler(new RestAuthenticationSuccessHandler())
.failureHandler(new SimpleUrlAuthenticationFailureHandler())
.and()
.logout()
.logoutSuccessHandler(new RestLogoutSuccessHandler());
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception
{
auth.userDetailsService(restUserDetailService);
}
3条答案
按热度按时间gv8xihay1#
要在csrf保护中包含csrf令牌,可以包含csrftokenrepository来生成令牌。在您的案例中,添加一条简单的线就足够了:
k97glaaz2#
使用springsecurity5.3.0.final,生成csrf令牌的方法之一是使用下面的代码在cookie中设置。
您还需要在服务器授权的请求中包含生成的csrf令牌。
如果您使用的是js框架,则需要通过在请求头中设置令牌来包含该令牌。
下面是jqueryajax调用的示例。
spring还提供了其他一些满足您需求的实现。https://docs.spring.io/spring-security/site/docs/5.3.0.release/reference/html5/#servlet-csrf公司
nbnkbykc3#
我们在安全测试中遇到了类似的问题,我们怀疑在websecurityconfig类的configure方法中意外禁用了csfr,默认情况下它是启用的。通过如下所示更改congfigure方法,我们让spring自动生成csfr令牌。
WebSecurity配置类配置方法==>