gpt4 book ai didi

javascript - AngularJS XSRF 策略不支持 cookie 路径

转载 作者:搜寻专家 更新时间:2023-11-01 03:32:15 24 4
gpt4 key购买 nike

我在同一台服务器上运行了三个不同路径的 spring boot 应用程序。它们都公开了 API 端点,其中之一还提供 Web 资源,例如 HTMLJavaScriptCSS

应用 1:

  1. 提供 UI 文件
  2. 提供 API 端点

应用2

  1. 为 API 端点提供服务

应用3

  1. 为 API 端点提供服务

到目前为止,我们只为应用程序 1 启用了 CSRF 验证。它与 org.springframework.security.web.csrf.CookieCsrfTokenRepository 配合得很好。我们将 XSRF-TOKEN 作为 cookie 发送,angularJs 在每个请求的 header 中发回 X-XSRF-TOKEN

现在我们正计划以与应用程序 1 相同的方式将 XSRF 引入其他两个应用程序。

但是我们遇到了一个问题。 AngularJs 从应用程序 1 发送 XSRF-TOKEN 并为所有三个应用程序使用相同的 token ,而每个应用程序每个(应用程序路径)都有自己的 token cookie。

这会导致其他两个服务的 CSRF 验证失败。

这是我使用的配置。

Spring-boot version     : 1.5.3
Angular version : 1.3.18

<beans:bean id="csrfTokenRepository" class="org.springframework.security.web.csrf.CookieCsrfTokenRepository">
<beans:property name="cookieHttpOnly" value="false" />
</beans:bean>

我得到的错误

{
"timestamp": 1509437659613,
"status": 403,
"error": "Forbidden",
"message": "Invalid CSRF Token '2fa60cb2-803f-4b2b-a1d6-7e10e56ca649' was found on the request parameter '_csrf' or header 'X-XSRF-TOKEN'.",
"path": "/application2/posturl/path"
}

此处 token 2fa60cb2-803f-4b2b-a1d6-7e10e56ca649 来自 application1,cookie 路径为/application1。

到目前为止我的观察:

  1. 我检查并确保所有三个应用程序都设置了 cookie为 httpOnly=false
  2. 我可以看到所有三个应用程序都有他们自己的 XSRF-TOKEN cookie 在 chrome 开发者控制台中他们自己的道路。
  3. 我没有在 Angular 端写一行更改其默认行为。
  4. 所有三个应用程序都作为 WAR 文件在相同的 IP 和端口上运行。

What I suspect here is that Angular is not honouring the path attribute of the cookies and it goes with the first cookie with a name XSRF-TOKEN.

有没有办法解决这个问题?

最佳答案

你必须改变 Angularjs 和 Spring 的默认行为在 Spring Security 上,您应该更改 xrsft cookie 名称(3 个应用程序中的每一个都不同)。

在 Angular 上,您可以在每个请求上添加一个拦截器,在 header 中动态设置正确的 cookie 值(通过 $cookies.get(key) 检索);

关于javascript - AngularJS XSRF 策略不支持 cookie 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47030859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com