Rom*_*man 12 java tomcat spring-security remember-me
我很好奇Remember Me如何工作以及它如何在Spring Security中运行?
我知道服务器会向客户端发送长期存在的cookie.然后客户端发回cookie,服务器可以识别客户端,因为服务器上有关系的哈希映射cookie --> session.
我不明白服务器[服务器端应用程序]在服务器[Tomcat]重新启动后如何通过cookie识别客户端.
Spring Security cookie-session在服务器关闭之前如何以及在何处保存地图?它是特定于服务器的(即Tomcat,Jetty等发生了不同的事情)吗?
PS弹簧安全和重新部署的另一个相关问题:即使我没有打勾RememberMe并登录,我仍然可以在重新部署约3分钟后得到认可.它可以修复吗?
mat*_*t b 12
Spring Security文档讨论了它实际上是如何工作的.
这种方法使用散列来实现有用的记住策略.本质上,在成功进行交互式身份验证后,cookie将被发送到浏览器,其中cookie的组成如下:
base64(username + ":" + expirationTime + ":" + md5Hex(username + ":" + expirationTime + ":" password + ":" + key))...
因此,remember-me令牌仅在指定的时间段内有效,并且前提是用户名,密码和密钥不会更改.值得注意的是,这具有潜在的安全性问题,因为捕获的记住我令牌将可以从任何用户代理使用,直到令牌到期为止.这与摘要式身份验证的问题相同.
基本上,cookie包含用户名,密码,到期时间和密钥(您指定的密钥),所有这些都是一起散列的.当您的浏览器将此cookie的内容发送到服务器时,Spring Security:
md5Hex()数据库中的用户名/密码/ etc,并将其与cookie中的值进行比较这里的基本假设是哈希函数 - md5Hex()上面的部分 - 提供了一种方法,可以在一个方向上轻松编码某些数据,但是反向(从md5Hex文本中恢复密码)是非常困难和不实用的.
axt*_*avt 10
不要将会话cookie与Remember Me cookies混淆.
会话cookie由服务器(例如Tomcat)发送,用于将传入请求与会话相关联.
记住我是由Spring Security发送的cookie,用于在不同的会话中验证客户端(例如,在原始会话到期之后或服务器重启之后).
要通过Remember Me cookie对用户进行身份验证,Spring Security提供了两种策略:
TokenBasedRememberMeServices - 默认情况下使用,安全性较低 - cookie包含密码和其他数据的哈希值PersistentTokenBasedRememberMeServices - 更安全,需要数据库访问 - cookie包含存储在数据库中的唯一标识符| 归档时间: |
|
| 查看次数: |
7709 次 |
| 最近记录: |