我使用Spring安全性启用了CSRF,它正在按预期工作。
我阅读了有关CSRF的Spring官方文档 http://docs.spring.io/spring-security/site/docs/3.2.7.RELEASE/reference/htmlsingle/#csrf
我还阅读了有关使用Spring和AngularJS的CSRF的本教程 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端点上发送OPTIONS请求来获取您的第一个CSRF令牌,例如/ api / login
Spring将创建一个绑定到临时会话的CSRF令牌(临时CSRF和JSESSIONID cookie)
因此,如果我问CSRF令牌而不是等待几分钟并最终尝试登录,那么CSRF令牌可能已经过了,我将不得不再问另一个。
我找不到如何配置临时Spring会话到期时间,但我找不到它的确切默认持续时间。
有没有人有任何相关信息?
答案 0 :(得分:4)
创建一个新的权威JSESSIONID和一个新的基于会话的CSRF令牌
这是session fixation策略。
CSRFToken生成至少有两种策略。
默认行为should be per session
。这意味着只要会话为alive
,并且只有CSRFToken将绑定到它(但这可以更改)。
成功验证后,由于会话固定,将使用新的CSRFToken创建一个新会话。
这是错的。只要会话活跃,它就会一直存在。因此,如果我问CSRF令牌而不是等待几分钟,最后再尝试 要登录,CSRF令牌可能已经过期,我将不得不问 另一个
我找不到如何配置临时Spring会话 到期时间,我找不到它的确切默认值 持续时间
temporary session
被称为temporary
,因为它在认证之前有效并且将被新的替换。但是对于common
会话,同样的超时策略也适用于它们。您可以使用session-timeout
在web.xml
中配置session-config
。 Tomcat
的默认值为30分钟。