spring - Spring 何时发回 XSRF-TOKEN set-cookie 响应 header ?

标签 spring spring-security csrf x-xsrf-token

标题很好地总结了这一切。我正在询问应满足的条件,因此 Spring 决定发回 Set-Cookie:XSRF-TOKEN=... 响应 header 。

我可以看到我的很多请求都在不需要时返回带有此类 header 的响应。例如,当我发送 GET 请求时,即使我为请求设置了 X-XSRF-TOKEN,它也会收到带有该 header 集的响应。但是对于具有上述请求 header 的 POST 请求,Spring 将停止发回 set-cookie header 。所以我想知道应该满足什么条件,所以Spring决定送回一个。

最佳答案

我花了一些时间追踪 Spring Security 的源代码,我自己找到了答案。

首先,我不知道 CSRF 是如何工作的,跟踪代码帮助我完全理解了它。我认为这是值得了解的事情。以下是从 CSRF 角度发送和接收的请求和响应的场景:

  1. 第一个请求被发送到服务器。由于它是第一个,因此没有设置 cookie 或 header 。
  2. 无论请求的方法如何,服务器(此处为 Spring Security)都会查看传入的请求。如果没有以名称 XSRF-TOKEN 发送到服务器的 cookie,它将在响应返回时生成一个 SET COOKIE header 。
  3. 客户端收到 cookie,对于第二个请求,它将在名称 X-XSRF-TOKEN 下向请求添加一个 header ,设置为与收到的 cookie 相同的值。当然,第二次请求时cookie会自动发送到服务器。
  4. 当服务器收到第二个请求时,这次它有一个 XSRF-TOKEN cookie,因此它会查找 X-XSRF-TOKEN header ,并且仅当这两个字符串匹配时才认为该请求有效。

至于我的问题的答案,正如我在第二步中提到的,如果没有将 cookie(带有 XSRF-TOKEN 名称)发送到服务器,则会生成 cookie。而且它不依赖于任何其他因素 - 永远如此!

关于spring - Spring 何时发回 XSRF-TOKEN set-cookie 响应 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44662070/

相关文章:

java - 通过基于 Java Spring 框架构建的 RESTful API 服务器对客户端进行身份验证

java - @TestConfiguration 在顶级类上的目的是什么?

java - STS IDE、Maven、谷歌 Guava

java - 如何使用join在spring data jpa和spring boot中添加计数字段

javascript - 带有 XSS 的 CRSF 将 GET 请求中的 % 解析为 %25

django - ReactJS & Django : How can I send csrf token with axios in a proper way?

grails - 如何在 grails 3.3.9 中为禁止的 url 访问显示自定义错误页面

java - @WithMockUser 在集成测试中不起作用 - Spring boot

jsf - Spring Security 5 和 JSF 2.2 Bean 身份验证

java - CSRF 验证/验证不适用于导出的 war 版本 - 使用 OWASP CSRFGuard 时