【发布时间】:2016-02-17 23:11:34
【问题描述】:
我启用了带有 Spring Security 的 CSRF,它按预期工作。
我阅读了有关 CSRF 的 Spring 官方文档 http://docs.spring.io/spring-security/site/docs/3.2.7.RELEASE/reference/htmlsingle/#csrf
我还阅读了这篇关于 CSRF with Spring and AngularJS 的教程 http://www.codesandnotes.be/2015/07/24/angularjs-web-apps-for-spring-based-rest-services-security-the-server-side-part-2-csrf/
Spring Security 所做的是为 那。所以基本上是这样的:
- 客户端通过 OPTIONS 请求请求令牌。
- 服务器创建一个临时会话,存储令牌并将 JSESSIONID 和令牌发送回客户端。
- 客户端使用该 JSESSIONID 和 CSRF 令牌提交登录凭据。
- 服务器匹配为接收到的 JSESSIONID 存储的 CSRF,如果一切顺利,则为客户端创建一个新的确定性 JSESSIONID 和一个新的基于会话的 CSRF 令牌,以在登录后验证其请求。
据我了解,当您未登录时,您可以通过在任何 API 端点(例如 /api/login)上发送 OPTIONS 请求来获取您的第一个 CSRF 令牌
Spring 将创建一个绑定到临时会话的 CSRF 令牌(临时 CSRF 和 JSESSIONID cookie)
因此,如果我询问 CSRF 令牌而不是等待几分钟最后尝试登录,CSRF 令牌可能已经过期,我将不得不询问另一个。
我找不到如何配置 Spring 临时会话到期时间,也找不到它的确切默认持续时间。
有人知道这方面的信息吗?
【问题讨论】: