Safari 11最近在Mac OSX上发布了。此更新导致我们的Web应用程序与我们reuest的 header 上的XSRF组合出现问题。
我将尝试以逻辑方式描述问题。
这是一个很好的情况:

  • 当用户要登录时,他从服务器收到带有Set-Cookie的响应,该响应包含XSRF token 的值。 Eg: Set-Cookie: XSRF-TOKEN=LKNBX4DZhL708KjXNkgXnlxTDCNuhsZG1kTc2SFy498; Path=/; Secure
  • 页面刷新。将执行的下一个调用在 header 中包含正确的XSRF值。在服务器端检查该值,等等。从前端进行的每个调用都将包含该XSRF token 。
  • 如果用户注销并想再次登录,则他的XSRF cookie将被新值覆盖,并能够使用该 token 登录。

  • 我们遇到的问题(在Mac OSX上使用Safari 11,其他浏览器未显示此行为):
  • 如果不存在Cookie,则用户可以登录普通
  • 但是,如果他想重新登录(在上一个 session 之后),则会进行刷新。在第一个调用上,其他调用上的刷新XSRF token 不会被新值替换,它们仍包含上一个 session 中的旧XSRF token 。当我们检查此请求时,我们看到此请求上的cookie包含正确的值,但是 header 反射(reflect)了旧 token 。
  • 带有错误头的调用会导致后端中的 session 关闭,因此用户被踢出 session 。
    TLDR;在Safari 11中, header XSRF-TOKEN在刷新后不会相应地更新为cookie值。我们可以在较旧的版本和其他浏览器上进行此操作,我们认为这是Safar 11错误。

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

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

    非常感谢!

    最佳答案

    我不能真的就您的 token 问题发表评论,但我也怀疑Safari 11的缓存存在问题。最近,即使对于指定了JSON请求的

    Cache-Control: no-cache, private
    

    从本地主机重新加载页面两次后,Safari开始缓存那些请求(显示为Cache (Disk))。 Firefox和Chrome都不做。对我来说似乎是个 bug ?

    关于safari - 刷新后未更新Safari 11 X-XSRF-TOKEN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46525065/

    10-12 13:01