2016-07-27 81 views
1

我們使用WSO2 IS作爲我們的企業身份平臺。出於安全原因,我們的一名租戶必須限制每個用戶的併發會話數。
預期的行爲如下:當用戶登錄時,如果他/她以前已經登錄並且會話仍然有效,則新會話必須覆蓋前一個會話,因此登錄結束並且他/她得到從第一個設備/瀏覽器註銷。總結:新會話總是使舊會議無效。
我一直在研究這樣的網站或尋找答案的http://soasecurity.org/,但我找不到任何答案。
我認爲我需要在用戶存儲中存儲WSO2 IS會話標識(commonauthId cookie中的標識,並存儲在會話緩存/持久性存儲中),以便我可以檢查當前用戶會話和註銷用戶如果Cookie ID和商店ID不匹配。但有兩個主要問題:限制WSO2IS中每個用戶的併發會話

  • 我在哪裏存儲用戶會話ID?我的主要用戶商店是LDAP,但我想避免一個額外的屬性,因爲它與許多其他應用程序共享,並促進這樣的變化可能很困難,原因很多。有什麼辦法可以將這些數據放入二級商店嗎?
  • 什麼是WSO2 IS中最適合的擴展點來添加用於在用戶存儲中存儲會話ID的代碼?我一直在查看身份驗證框架,發現在DefaultAuthenticationRequestHandler類中結束流的方法是在沒有以前緩存的可用會話時創建新會話的地方。擴展該方法似乎有點「棘手」,但我找不到更好的解決方案。也許你可以自定義認證器或用戶存儲,但我認爲這不是認證流程內擴展的好處,因爲新的會話是稍後在請求處理程序中創建的。

在此先感謝。

+0

您正在使用哪個版本的WSO2 IS? – Hos

+0

上一個穩定版本:5.1.0 –

回答

0

WSO2身份服務器實際上並不關心打開會話的數量。恕我直言,身份認證服務器不是檢查公開會話的最佳執行點。一旦用戶已經登錄,您就無法控制框架,並返回用戶聲明(或Oauth令牌)。

我在哪裏存儲用戶會話ID?

如果你enable the session persistence,會話信息(用戶會話,saml SP sessions,...)存儲在數據庫中。但是 - 它用於內部使用。如果用戶註銷或關閉瀏覽器,則記錄可能仍然存在。沒有關於用戶網絡會話的信息。

只是一個暗示 - 我們使用了一個VPN代理(Juniper SA作爲SP)和WSO2IS作爲IdP來實施一個獨特的用戶會話(對於一個新會話,舊會話失效)。

玩得開心

相關問題