如何配置Spring Security发送“ X-CSRF-TOKEN”?
问题是要使CSRF令牌在Spring Security和Angular之间工作。
Angular的Spring Security CSRF令牌拦截器似乎应该可以完成任务,但是服务器的HEAD响应中没有“ X-CSRF-TOKEN”。
我当前的微小实现可在GitHub(Tag
v.1.0
)上获得,如果知道该主题的人对代码有快速了解,我将不胜感激,这个问题应该很容易发现。
根据文档,我的印象是应该自动启用CSRF,但事实并非如此。
我正在使用Spring Boot,如果需要以其他方式配置某些内容,则我希望使用基于注释的配置,而不是XML。
还有其他方法可以使Spring Security对抗Angular吗?
回答:
我相信Angular会寻找一个名为“ XSRF-
TOKEN”的cookie,因此对客户端来说,最简单的方法就是发送该cookie。您可以在一个Filter
例子中做到这一点(例如来自https://github.com/spring-
guides/tut-spring-security-and-angular-
js/blob/master/single/src/main/java/demo/UiApplication的示例.java#L65):
private Filter csrfHeaderFilter() { return new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class
.getName());
if (csrf != null) {
Cookie cookie = new Cookie("XSRF-TOKEN", csrf.getToken());
cookie.setPath("/");
response.addCookie(cookie);
}
filterChain.doFilter(request, response);
}
};
}
更新:从spring security 4.2开始,如果您使用cookie
csrf存储库,则默认使用angular的正确cookie名称(链接仍然是最佳来源),即不再需要自定义过滤器。例:
@Configuration@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
protected static class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
...
.and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
以上是 如何配置Spring Security发送“ X-CSRF-TOKEN”? 的全部内容, 来源链接: utcz.com/qa/430875.html