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

时间:2017-02-20 21:12:59

标签: csrf x-xsrf-token

我们基于Angular的webapp与企业门户集成,后者在不同的域和上下文路径上运行。我使用基于Spring Security的CSRF令牌来验证传入的请求。该应用程序完全在本地工作,但当我将其与门户集成时,所有后置调用都失败了403因为Angular无法读取XSRF-Token并将请求头中的X-XSRF-Token设置为API调用。经过调查,我发现门户网站和我们的应用程序的上下文路径是不同的,因此spring将XSRF-Token设置为Path,Expires和domain为Null。有什么办法可以在Spring创建时将XSRF-Token设置为特定的cookie路径吗?

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

1 个答案:

答案 0 :(得分:4)

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

private CsrfTokenRepository getCsrfTokenRepository() {
    CookieCsrfTokenRepository tokenRepository = CookieCsrfTokenRepository.withHttpOnlyFalse();
    tokenRepository.setCookiePath("/");
    return tokenRepository;
}

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

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

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

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