我有一个starnd spring启动应用程序,并在sprint安全配置中配置了csrf,如下所示:
http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()).and().authorizeRequests()
.mvcMatchers(HttpMethod.POST,"/slam").authenticated()
.antMatchers("/myPage").authenticated()
.antMatchers("/login").permitAll()
.antMatchers("/contact").denyAll()
.and().formLogin().and().httpBasic();
我正在使用cookiecsrftokenrepository并使用postman访问slam api我在访问此api之前已经对自己进行了身份验证,并从服务器端获得jsessioni、xsrf令牌,并将其在标头中传递给slam api
在此之后,我只是发送请求,但我仍然得到403禁止。另一方面,如果我使用下面的配置禁用csrf令牌。post请求正在成功运行。
http.csrf().disable()
通过 Postman 的post请求,使csrf令牌正常工作,我缺少了什么?
1条答案
按热度按时间wnavrhmk1#
spring的文档说明了以下内容:
默认情况下,cookiecsrftokenrepository将写入名为xsrf token的cookie,并从名为x-xsrf-token的头或http参数_csrf读取它。这些默认值来自angularjs
在您提供的 Postman 图像中,我只能看到作为cookie的xsrf令牌,但没有标头。您需要从该cookie中提取值,并以适当的头或适当的查询参数将其发送回。