【问题标题】:How to set CSRF Token to different context path如何将 CSRF Token 设置为不同的上下文路径
【发布时间】:2017-07-10 07:22:23
【问题描述】:

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

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

【问题讨论】:

    标签: csrf x-xsrf-token


    【解决方案1】:

    在您的配置安全性(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 的路径。

    【讨论】:

    • 嗨,刚刚看到这篇文章我遇到了同样的问题,我的上下文路径设置为 /api 我也尝试将我的 cookiePath 设置为 /api,但仍然出现 403 错误。有什么我想念的吗?
    • 工作,完美。
    猜你喜欢
    • 2017-04-22
    • 1970-01-01
    • 2011-02-23
    • 2019-12-20
    • 2019-01-20
    • 2015-09-09
    • 1970-01-01
    • 2019-04-10
    • 2011-12-18
    相关资源
    最近更新 更多