【问题标题】:How long is Spring temporary CSRF token expiration time?Spring 临时 CSRF 令牌过期时间是多久?
【发布时间】: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 所做的是为 那。所以基本上是这样的:

  1. 客户端通过 OPTIONS 请求请求令牌。
  2. 服务器创建一个临时会话,存储令牌并将 JSESSIONID 和令牌发送回客户端。
  3. 客户端使用该 JSESSIONID 和 CSRF 令牌提交登录凭据。
  4. 服务器匹配为接收到的 JSESSIONID 存储的 CSRF,如果一切顺利,则为客户端创建一个新的确定性 JSESSIONID 和一个新的基于会话的 CSRF 令牌,以在登录后验证其请求。

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

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

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

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

有人知道这方面的信息吗?

【问题讨论】:

    标签: spring session csrf


    【解决方案1】:

    创建一个新的确定性 JSESSIONID 和一个新的基于会话的 CSRF 令牌

    这是session fixation 策略。

    CSRFToken 生成至少有 2 种策略。

    1. per session
    2. per request

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

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

    这是错误的。只要会话处于活动状态,它就会一直存在。

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

    temporary session 被称为temporary,因为它在身份验证之前一直有效,并且会被新的替换。但与common 会话相同的超时策略适用于它们。您可以使用session-configweb.xml 中配置session-timeoutTomcat 的默认值为 30 分钟。

    【讨论】:

    • 谢谢,但您似乎错了,因为我已将会话配置为持续 24 小时(web.xml 中为 1440 分钟)。当我通过身份验证时,它可以有效地持续 24 小时,所以没关系。但是,当我未通过身份验证时,会话仅持续几分钟,因此必须有其他原因,可能是未经身份验证的会话的硬编码超时。
    • @singe3 我有几个问题:1)你对spring config做了什么吗? 2)如何从服务器返回 JSESSIONID 和 CSRFToken(作为 cookie(什么是 exp 时间)和/或响应正文)?
    • 不,我没有更改有关 csrf 令牌的 spring 默认配置。我通过在登录 POST 之前在登录端点上发出 OPTIONS 请求来解决前端的问题,以便检索新的令牌。我的令牌作为自定义标头发送到客户端,因为它是跨域的,所以我无法从 Javascript 读取 cookie。
    猜你喜欢
    • 1970-01-01
    • 2015-02-14
    • 2013-03-31
    • 2017-10-18
    • 2015-01-08
    • 2012-04-17
    • 2016-05-06
    • 2015-03-12
    • 1970-01-01
    相关资源
    最近更新 更多