如何通过单次登录管理不同网络应用程序的网络会话



我有两个osgi分布式web应用程序A(A1,A2)和B(B1,B2),我使用shiro共享http会话进行单点登录,这样一个系统中的logging也会登录另一个系统。但我希望会话数据在系统A和B之间与身份验证/授权数据分开,所以我需要一种方法来共享身份验证数据并分开A和B的系统特定会话数据。我正在考虑使用shiro进行单点登录,并为每个系统使用不同的分布式会话来存储系统特定数据,主要工作流程为:

  1. 使用shiro登录系统A,使用shiro会话id创建另一个会话(或一些数据持有者对象来存储会话数据),并将其存储在后端(数据库或缓存)
  2. 在系统A中做一些事情,将会话数据放入上面创建的会话中,写入后端
  3. 当系统A中出现另一个请求时,请查找id与shiro会话id匹配的会话,如果找到,请使用它,否则创建新的会话

这有道理吗?这是解决我问题的正确方法吗?最好的方法是什么?请分享你的想法。欢迎提供任何意见。非常感谢。

我用Servlet Filter做过类似的事情。我的HppSession包含授权id,然后我查找该id并将其作为请求的安全上下文提供。如果不存在安全id,则客户端将被迫登录。显然,安全上下文可以保存在分发机制中,因此它可以从集群中的所有系统中获得。

确保您在客户端和系统之间使用https,否则有人可以窃听、读取带有id的cookie,并在受害者授权的情况下登录其中一个系统。即会话劫持。

相关内容

最新更新