【问题标题】:Disable CSRF for specific URLs SPA Spring Gateway WebFlux为特定 URL 禁用 CSRF SPA Spring Gateway WebFlux
【发布时间】:2022-01-31 17:46:43
【问题描述】:

我在 WebFilterChain 中有下一个 CSRF 代码:

            .csrfTokenRepository(CookieServerCsrfTokenRepository.withHttpOnlyFalse())
            .requireCsrfProtectionMatcher(getURLsForDisabledCSRF())

我想为几个 URL 关闭对 POST 方法的 CSRF 检查。我找到了 NegatedServerWebExchangeMatcher,它允许执行下一步:

        return new NegatedServerWebExchangeMatcher(ServerWebExchangeMatchers.pathMatchers(
HttpMethod.POST, "/services/service1/api/some-post-endpoint1", 
"/services/service1/api/some-post-endpoint2");

所以总的来说这段代码是有效的,但是当我尝试获取请求登录页面或域页面时,我会得到“无效的 CSRF”或“找不到预期的 CSRF”。同样在 Spa 尝试将我重定向到 index.html 后,此 GET 重定向请求上将出现 403,表示:Invalid CSRF or no CSRF present.

【问题讨论】:

    标签: spring spring-security microservices csrf webflux


    【解决方案1】:

    设置requireCsrfProtectionMatcher 时,您会覆盖允许GET 请求的默认配置。

    如果您想同时使用两者,您可以从 getURLsForDisabledCSRF 返回一个 AndServerWebExchangeMatcher,它结合了默认 CSRF 匹配器和您的自定义匹配器。

    new AndServerWebExchangeMatcher(
        CsrfWebFilter.DEFAULT_CSRF_MATCHER,
        new NegatedServerWebExchangeMatcher(ServerWebExchangeMatchers.pathMatchers(HttpMethod.POST,
            "/services/service1/api/some-post-endpoint1",
            "/services/service1/api/some-post-endpoint2"))
    )
    

    【讨论】:

    • 非常感谢!没有这方面的信息……你怎么知道的? :)
    • requireCsrfProtectionMatcher Javadoc 中声明“配置用于确定何时启用 CSRF 保护的 ServerWebExchangeMatcher。默认为 PUT、POST、DELETE 请求。”
    猜你喜欢
    • 2019-02-04
    • 2014-04-26
    • 2021-05-06
    • 2019-06-21
    • 2022-12-15
    • 2016-12-13
    • 2020-12-16
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多