如何将 CSRF Token 设置为不同的上下文路径

jav*_*eek 5 csrf x-xsrf-token

我们基于 Angular 的 web 应用程序与在不同域和上下文路径上运行的企业门户集成。我正在使用基于 Spring Security 的 CSRF 令牌来验证传入的请求。该应用程序在本地运行良好,但是当我将它与门户集成时,所有的 post 调用都失败了 403,因为 Angular 无法读取 XSRF-Token 并将请求标头中的 X-XSRF-Token 设置为 API 调用。经过调查,我发现门户和我们的应用程序的上下文路径不同,因此 spring 将带有路径、过期和域的 XSRF-Token 设置为 Null。当 spring 创建它时,有什么方法可以将 XSRF-Token 设置为特定的 cookie 路径?

注意:我有一个替代解决方案来创建过滤器并从请求标头中读取 cookie,并使用我想要的路径在浏览器上放置一个新的 cookie。我正在寻找配置级别的解决方案。

Max*_*axL 12

在您的配置安全性(Java 文件)中,可以添加:

private CsrfTokenRepository getCsrfTokenRepository() {
    CookieCsrfTokenRepository tokenRepository = CookieCsrfTokenRepository.withHttpOnlyFalse();
    tokenRepository.setCookiePath("/");
    return tokenRepository;
}
Run Code Online (Sandbox Code Playgroud)

并更改函数configure(...),该行:

http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()).and()...

http.csrf().csrfTokenRepository(this.getCsrfTokenRepository()).and()...

这允许有一个解决方案来个性化 cookie 的路径XSRF-TOKEN