我很好奇记得我如何工作,它如何在春季安全方面工作?

我了解服务器将长寿命的cookie发送给客户端。然后客户端将cookie发送回去,服务器可以识别客户端 cookie --> session.

我不明白在服务器[Tomcat]重新启动后,服务器[服务器端应用程序]如何识别Cookie的客户端。

弹簧安全性如何以及在何处保存 cookie-session 服务器关闭之前的地图?它是否特定于服务器(即Tomcat,Jetty等发生了不同的事情)?

ps春季安全和重新部署的另一个相关问题:即使我不打勾 RememberMe 并登录,在重新部署约3分钟后,我仍然被认可。可以解决吗?

有帮助吗?

解决方案

春季安全文档讨论 这实际上是如何工作的。

这种方法使用哈希来实现有用的记忆策略。从本质上讲,在成功的交互式身份验证后,将cookie发送到浏览器,而cookie的组成如下:

base64(username + ":" + expirationTime + ":" + md5Hex(username + ":" + expirationTime + ":" password + ":" + key))

...

因此,请记住我的令牌仅适用于指定的期限,并且规定用户名,密码和密钥不会更改。值得注意的是,这存在潜在的安全问题,因为捕获的记住我的令牌将从任何用户代理都可以使用,直到令牌到期为止。这与Digest身份验证是相同的问题。

基本上,cookie包含用户名,密码,到期时间和键(您指定),所有这些都是 哈希 一起。当您的浏览器将此cookie的内容发送到服务器时,Spring Security:

  1. 从后端检索给定用户名的密码
  2. 计算 md5Hex() 数据库中的用户名/密码/等
  3. 如果他们匹配 - 您将登录!如果不是匹配,那么您提供了伪造的cookie或一个用户名/密码/密钥之一已更改。

这里的基本假设是哈希函数 - md5Hex() 上面的一部分 - 提供了一种轻松地在一个方向上编码某些数据的方法,但逆转却是难以置信且不可行的(要从 md5Hex 文本)。

其他提示

不要将cookie与记住我饼干混淆。

Session Cookie由服务器(例如Tomcat)发送,并用于将传入请求与会话相关联。

请记住,我的cookie是由春季安全性发送的,以在不同的会话中对客户端进行身份验证(例如,原始会话到期后或在服务器重新启动之后)。

为了对用户进行身份验证,请记住我Cookie Spring Security提供了2种策略:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top