在WSO2IS中限制每个用户的并发会话

时间:2016-07-27 08:10:10

标签: wso2is

我们正在使用WSO2 IS作为我们的企业标识平台。出于安全原因,我们的一个租户必须限制每个用户的并发会话数 预期的行为如下:当用户登录时,如果他/她之前已经登录并且会话仍然有效,则新会话必须覆盖前一个会话,因此登录结束正常并且他/她退出从第一个设备/浏览器。总结:新会话总是使旧会话无效 我一直在研究这样的网站或http://soasecurity.org/寻找答案,但我找不到任何答案 我认为我需要在用户存储中存储WSO2 IS会话ID(在commonauthId cookie中存在并存储在会话缓存/持久性存储中),因此我可以检查当前用户会话是什么并注销用户如果cookie ID和商店ID不匹配。但有两个主要问题:

  • 我在哪里存储用户会话ID?我的主要用户存储是LDAP,但是我想避免使用一个额外的属性,因为它与许多其他应用程序共享并且由于许多原因而促进这样的更改可能很困难。有没有办法将这些数据放入二级商店?
  • WSO2中最合适的扩展点是什么?添加用于在用户存储中存储会话ID的代码?我一直在查看身份验证框架,发现DefaultAuthenticationRequestHandler类中的方法concludeFlow是在没有先前缓存的可用会话时创建新会话的地方。扩展该方法似乎有点“棘手”,但我找不到更好的解决方案。也许您可以自定义身份验证器或用户存储,但我认为这不是身份验证流程中的一个很好的扩展点,因为新的会话稍后会在请求处理程序中创建。

提前致谢。

1 个答案:

答案 0 :(得分:0)

WSO2身份服务器实际上并不关心打开会话的数量。恕我直言,身份服务器不是检查开放会话的最佳执行点。一旦用户已经登录,您就无法对框架进行太多控制,并返回用户断言(或Oauth令牌)。

  

我在哪里存储用户会话ID?

如果您enable the session persistence,会话信息(用户会话,saml SP会话......)将存储在数据库中。但是 - 它是供内部使用的。如果用户注销或关闭浏览器,则记录可能仍在那里。没有关于用户网络会话的信息。

只是一个提示 - 我们使用VPN代理(Juniper SA作为SP)和WSO2IS作为IdP来强制执行唯一的用户会话(对于新会话,旧会话无效)。

玩得开心