Spring临时CSRF令牌到期时间有多长?

时间:2016-02-17 14:24:29

标签: spring session csrf

我使用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的作用是为它设置一个临时会话   那。所以基本上它是这样的:

     
      
  1. 客户端向令牌发出OPTIONS请求。
  2.   
  3. 服务器创建临时会话,存储令牌并将JSESSIONID和令牌发送回客户端。
  4.   
  5. 客户端使用该JSESSIONID和CSRF令牌提交登录凭据。
  6.   
  7. 服务器匹配为收到的JSESSIONID存储的CSRF,如果全部为绿灯,则为客户端创建新的权威JSESSIONID和新的基于会话的CSRF令牌,以便在登录后验证其请求。
  8.   

据我了解,当您未登录时,您可以通过在任何API端点上发送OPTIONS请求来获取您的第一个CSRF令牌,例如/ api / login

Spring将创建一个绑定到临时会话的CSRF令牌(临时CSRF和JSESSIONID cookie)

因此,如果我问CSRF令牌而不是等待几分钟并最终尝试登录,那么CSRF令牌可能已经过了,我将不得不再问另一个。

我找不到如何配置临时Spring会话到期时间,但我找不到它的确切默认持续时间。

有没有人有任何相关信息?

1 个答案:

答案 0 :(得分:4)

  

创建一个新的权威JSESSIONID和一个新的基于会话的CSRF令牌

这是session fixation策略。

CSRFToken生成至少有两种策略。

  1. per session
  2. per request
  3. 默认行为should be per session。这意味着只要会话为alive,并且只有CSRFToken将绑定到它(但这可以更改)。 成功验证后,由于会话固定,将使用新的CSRFToken创建一个新会话。

      

    因此,如果我问CSRF令牌而不是等待几分钟,最后再尝试   要登录,CSRF令牌可能已经过期,我将不得不问   另一个

    这是错的。只要会话活跃,它就会一直存在。

      

    我找不到如何配置临时Spring会话   到期时间,我找不到它的确切默认值   持续时间

    temporary session被称为temporary,因为它在认证之前有效并且将被新的替换。但是对于common会话,同样的超时策略也适用于它们。您可以使用session-timeoutweb.xml中配置session-configTomcat的默认值为30分钟。