客户端会话

dea*_*mon 7 java security session servlets application-server

我希望几个相关Web应用程序的客户端保持自己的身份验证状态.这提高了可伸缩性,因为不需要群集节点之间的会话复制.它使得Java Servlets和PHP等不同服务器技术的集成变得更加容易.

我的计划如下:

  1. 在客户端身份验证后,使用用户名和会话到期时间设置已签名和加密的cookie.
  2. 当客户端发送请求时,服务器会解密并验证cookie,并根据cookie值授予或拒绝访问权限.
  3. 会话到期将通过重置cookie进行更新.

所有想要使用会话的服务器只需知道cookie机制和解密密钥.另请参阅:客户端层中的会话状态

这种方法可以吗?是否可以将它集成到servlet容器/应用程序服务器中,以便它对应用程序透明?例如,servlet应该能够使用HttpServletRequest#getRemoteUser().这可能吗?或者我是否需要像Spring Security这样的容器级别以上的东西?是否有任何现有的客户端会话管理库?

Pek*_*ica 8

不是个好主意.完全在客户端存储会话到期和用户名等重要数据是太危险的IMO,加密与否.即使这个概念本身在技术上是安全的(我无法深入回答,我也不是加密专家),只需获取加密密钥,就可以在不损害服务器的情况下促进闯入.

掌握密钥的人可以随意生成会话cookie,模仿任何用户任何时间长度,这是经典会话概念旨在防止的.

针对此问题,有更好且可扩展的解决方案.例如,为什么不设置所有相关服务器和服务可以轮询的中央会话验证实例?环顾四周,我百分百肯定有现成的解决方案满足您的需求.


Jam*_*pic 7

我不同意海报说这种方法不安全。它的变体用于许多备受推崇的框架,例如 Rails 和 Play!,正是出于您概述的原因,并且在正确实施时它是完全安全的。