具有CookieCsrfTokenRepository和httpOnly = true的Spring Boot CSRF

时间:2019-01-15 16:52:45

标签: spring-boot csrf cookie-httponly

我正在尝试在Spring Boot应用程序中打开HttpOnly的情况下设置csrf支持,并且在Spring CsrfFilter的工作方式上遇到麻烦。

首先,我进行了以下设置:

 http
      .csrf()
        .csrfTokenRepository(new CookieCsrfTokenRepository())

那让我非常接近。在将XSRF-TOKEN Cookie添加到响应的GET请求中,浏览器对其进行设置,然后在以下请求中将其发送。当我执行POST请求或从Spring CsrfFilter传递此行的任何内容时出现问题:

if (!this.requireCsrfProtectionMatcher.matches(request)) {
        filterChain.doFilter(request, response);
        return;
    }

在那之后,它得到的代码如下:

    String actualToken = request.getHeader(csrfToken.getHeaderName());
    if (actualToken == null) {
        actualToken = request.getParameter(csrfToken.getParameterName());
    }
    if (!csrfToken.getToken().equals(actualToken)) {

csrfToken是从CookieRepository加载的令牌。

这对我来说没有任何意义,因为这显然是试图从标头中获取csrf令牌,或者如果请求参数中没有该令牌。发出请求时,我都无法设置这些内容,因为它是HttpOnly Cookie,因此无法从JavaScript访问它。

作者在这里打算做什么?我找不到任何好的资源来说明应该怎么做。

Here's the class for reference

0 个答案:

没有答案