Spring Security Form身份验证:如何跟踪会话?

时间:2015-10-07 23:09:25

标签: spring-security form-authentication

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

我不明白的是Spring Security Servlet如何跟踪最终用户在后续请求后的用户情况?

我理解,对于basic-authenticationServlet只能查找已编码的用户名&标题中的密码。但这如何与form authentication一起使用?

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

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

1 个答案:

答案 0 :(得分:2)

通过身份验证后,Spring Security会添加一个名为SPRING_SECURITY_CONTEXT的会话属性。

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

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

  

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

是的,因为服务器端会话就像数据库一样。在每个请求中,服务器将根据JSESSIONID cookie的值查找会话属性。

  

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

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

如果使用HTTP基本身份验证,您的站点也同样容易受到CSRF的攻击。<​​/ p>

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