Safari 11 X-XSRF-TOKEN 刷新后未更新

2024-02-21

最近,Mac OSX 上的 Safari 11 发布。此更新导致我们的 Web 应用程序与请求标题上的 XSRF 结合出现问题。 我将尝试以逻辑方式描述问题。 好的情况应该是这样的:

  1. 当用户想要登录时,他会收到服务器的响应,其中包含包含 XSRF 令牌值的 Set-Cookie。Eg: Set-Cookie: XSRF-TOKEN=LKNBX4DZhL708KjXNkgXnlxTDCNuhsZG1kTc2SFy498; Path=/; Secure

  2. 页面刷新 将执行的下一个调用在标头中包含正确的 XSRF 值。在服务器端检查该值等。来自前端的每个调用都将包含该 XSRF 令牌。

  3. 如果用户注销并想要再次登录,他的 XSRF cookie 将被新值覆盖,并且能够使用该令牌登录。

我们的问题情况(Mac OSX 上的 Safari 11,其他浏览器不会显示此行为):

  1. 如果不存在cookie,用户可以正常登录

  2. 但是,如果他想重新登录(在上一个会话之后),则会进行刷新。在第一次调用(其他刷新)时,调用中的 XSRF 令牌不会被新值替换,它们仍然包含上一个会话中的旧 XSRF 令牌。当我们检查此请求时,我们看到此请求中的 cookie 包含正确的值,但标头反映的是旧令牌。

  3. 使用错误标头的调用会导致后端会话关闭,因此用户被踢出会话。 太长了;在 Safari 11 中,刷新后标头 XSRF-TOKEN 不会根据 cookie 值进行相应更新。我们在旧版本和其他浏览器上也可以使用此功能,我们认为这是 Safar 11 的一个错误。

还有其他人遇到类似的问题吗? Safari 11 中页面刷新后,请求的标头值在哪里没有更新?

编辑:经过测试,我们发现在 URL 中放置时间戳作为查询参数会强制 Safari 11 发送正确的请求。似乎某些请求被缓存并且更新的标头被忽略。

多谢!


我无法真正评论您的令牌问题,但我也怀疑 Safari 11 存在缓存问题。最近,即使对于指定的 JSON 请求

Cache-Control: no-cache, private

Safari 开始缓存这些请求(显示为Cache (Disk))从本地主机重新加载页面两次后。 Firefox 和 Chrome 都没有做到这一点。对我来说看起来像一个错误?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Safari 11 X-XSRF-TOKEN 刷新后未更新 的相关文章

随机推荐