**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
7小时前关闭。
Improve this question
我正在尝试在Sping Boot 应用程序中实现CSRF保护。我创建了以下配置:
@Configuration
@EnableWebSecurity
public class SpringSecurityConfiguration {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
.authorizeRequests()
.antMatchers(HttpMethod.GET, "csrf").permitAll()
.anyRequest().authenticated()
.and()
.httpBasic();
return http.build();
}
}
和以下REST控制器来检索令牌:
@RestController
@RequestMapping("/csrf")
public class CsrfRestController {
// @GetMapping
// public void getCsrfToken(HttpServletRequest request) {
// // https://github.com/spring-projects/spring-security/issues/12094#issuecomment-1294150717
// CsrfToken csrfToken = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
// csrfToken.getToken();
// }
@GetMapping
public CsrfToken getCsrfToken(CsrfToken token) {
return token;
}
}
我可以让令牌对CSRF REST控制器执行GET
,但当我尝试使用令牌从那里执行POST
时,它仍然不工作,日志仍然给予我一个403错误,告诉我使用了无效的令牌,我错过了什么?
不确定是否相关,但用户/pwd/角色在application.properties
中,因为我只需要一个用户,因为此API仅由我的Angular 前端使用。
spring.security.user.name=myuser
spring.security.user.password=mypass
spring.security.user.roles=ADMIN
1条答案
按热度按时间bz4sfanl1#
如果你真的想显示你的crsf标记,那么你应该修改你的代码,在你的
SpringSecurityConfiguration
中的“csrf”前面缺少“/”:.antMatchers(HttpMethod.GET, "/csrf").permitAll()
您的用户身份验证属性不相关。
您不必手动处理此问题,因为Spring Security会在所有请求中注入CSRF标头,尤其是安全端点(但不仅仅是安全端点)。使用浏览器(F12,网络选项卡)查看请求标头的运行情况。