【问题标题】:Spring Security Form Authentication: How are sessions tracked?Spring Security 表单身份验证:如何跟踪会话?
【发布时间】:2015-10-09 07:10:04
【问题描述】:

我在Spring Security 上使用表单身份验证。所以我去我的登录表单,输入我的用户名和密码,然后我就可以访问我网站上受保护的资源。与基本身份验证不同,form authentication 仅在第一次请求时发送用户名和密码。

我不明白Spring Security Servlet 如何跟踪最终用户在后续请求中的目标?

我知道使用basic-authenticationServlet 可以在标题中查找编码的用户名和密码。但是这如何与form authentication 一起工作?

我假设设置了某种会话变量?如果是这样,它是什么?

Spring Security 是否有某种临时数据库将会话 ID 链接到用户名?最重要的是,如果我不使用CSRF token,攻击者需要做的只是知道这个会话变量来冒充用户吗?

【问题讨论】:

    标签: spring-security form-authentication


    【解决方案1】:

    在认证时,Spring Security 添加一个名为 SPRING_SECURITY_CONTEXT 的会话属性。

    此会话属性存储在服务器内存中,并通过 JSESSIONID cookie 与您的浏览器相关联。

    它包含一个SecurityContextImpl 的实例,其中包括一个UsernamePasswordAuthenticationToken,它包含用户名。

    Spring 安全性是否有某种临时数据库将会话 ID 链接到用户名?

    是的,就服务器端会话而言,它就像一个数据库。对于每个请求,服务器都会根据 JSESSIONID cookie 的值查找您的会话属性。

    如果我不使用 CSRF 令牌,攻击者需要做的只是知道这个会话变量来冒充用户吗?

    如果没有 CSRF 保护,攻击者可以冒充用户,让他们使用他们的网站并向您的网站发出请求(通过 JS 或 flash 等)。

    如果也使用 HTTP 基本身份验证,您的网站同样容易受到 CSRF 的攻击。

    始终在您网站上的任何重要表单上使用 CSRF 保护。为什么不呢?

    【讨论】:

      猜你喜欢
      • 2016-01-05
      • 1970-01-01
      • 2015-02-06
      • 2010-11-20
      • 2013-05-19
      • 2022-01-15
      • 2014-02-26
      • 2018-08-31
      • 2015-02-06
      相关资源
      最近更新 更多