无效的记住我令牌(系列/令牌)不匹配。 意味着以前的cookie盗窃攻击

org.springframework.security.web.authentication.rememberme.CookieTheftException: Invalid remember-me token (Series/token) mismatch. Implies previous cookie theft attack. at org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices.processAutoLoginCookie(PersistentTokenBasedRememberMeServices.java:102) at org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices.autoLogin(AbstractRememberMeServices.java:115) 

我注意到processAutoLoginCookie方法被调用两次。 方法本身的行为似乎是正确的,例如,更新数据库中的令牌并更新客户端中的cookie。 任何有关这方面的帮助将不胜感激。

在等待有人发布这个问题的答案时,我想到了一个更好的解决方案。 默认情况下,PersistentTokenBasedRememberMeServices.processAutoLoginCookie()更新每个请求的标记。 我的解决方案是覆盖processAutoLoginCookie()的行为并删除co​​okie部分的更新。 这解决了cookietheftexception,但这将为攻击者打开一个安全漏洞,因为cookie不会针对每个请求进行更新。 如果攻击者能够窃取cookie,他可以使用该cookie访问受保护的站点。 为了防止这种情况发生,我正在考虑添加一个IP地址作为cookie的一部分,如果cookie来自会话的所有者,则validation每个请求。 我还没有实现IPvalidation,但对我来说这是解决这个问题的更好方法。

我希望这也有助于你们中的一些人遇到同样的问题。

修改你的web.xml,在错误页面部分,为org.springframework.security.web.authentication.rememberme.CookieTheftException添加位置(例如/ signin)