Spring 何时发回 XSRF-TOKEN set-cookie 响应标头?
Posted
技术标签:
【中文标题】Spring 何时发回 XSRF-TOKEN set-cookie 响应标头?【英文标题】:When does Spring send back a XSRF-TOKEN set-cookie response header? 【发布时间】:2017-11-23 12:42:45 【问题描述】:标题很好地总结了这一切。我正在询问应满足的条件,因此 Spring 决定发回 Set-Cookie:XSRF-TOKEN=...
响应标头。
我可以看到我的许多请求都在不需要时收到带有此类标头的响应。例如,当我发送 GET 请求时,即使我为请求设置了 X-XSRF-TOKEN
,它也会收到带有该标头集的响应。但是对于具有上述请求标头的 POST 请求,Spring 将停止发回 set-cookie 标头。所以我想知道应该满足什么条件才能让Spring决定发回一个。
【问题讨论】:
【参考方案1】:我花了一些时间跟踪 Spring Security 的源代码,并设法自己找到了答案。
首先,我不知道 CSRF 是如何工作的,跟踪代码帮助我完全理解它。我认为这是值得了解的。下面是从 CSRF 的角度发送和接收请求和响应的场景:
-
第一个请求被发送到服务器。由于它是第一个,它没有设置 cookie 或标头。
不管请求的方法是什么,服务器(这里是 Spring Security)都会查看传入的请求。如果没有以 XSRF-TOKEN 名称发送到服务器的 cookie,它将在响应返回的路上生成一个 SET COOKIE 标头。
客户端收到 cookie,对于第二个请求,它会在请求中添加一个名为 X-XSRF-TOKEN 的标头,设置为与收到的 cookie 相同的值。当然,cookie 会随着第二个请求自动发送到服务器。
当服务器收到第二个请求时,这一次它有一个 XSRF-TOKEN cookie,所以它会寻找一个 X-XSRF-TOKEN 标头,只有当这两个字符串匹配时,该请求才被认为是有效的。
至于我的问题的答案,正如我在第二步中提到的,如果没有向服务器发送 cookie(带有 XSRF-TOKEN 名称),则会生成 cookie。而且它不依赖于任何其他因素 - 永远如此!
【讨论】:
以上是关于Spring 何时发回 XSRF-TOKEN set-cookie 响应标头?的主要内容,如果未能解决你的问题,请参考以下文章
Angularjs 正在从 Spring Boot 接收 XSRF-TOKEN 但不发送 X-XSRF-TOKEN
如何使用从 Spring MVC 发回的 JSON 对象填充 jQuery 数据表的行?