如何配置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

回到顶部