首页 文章

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

提问于
浏览
0

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

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

1 回答

  • 3

    在配置安全性(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 .

相关问题