2016-07-07 43 views
0

我目前正面臨以下問題:子域上的登錄會話

一個主域名運行特定的PHP框架與框架特定的會話;現在有一個新的子域,它運行不同的PHP框架,我需要與子域共享來自主域的登錄會話信息。即用戶只能在主域上註冊,但一旦登錄,他們也將登錄到他們在子域中的帳戶。還應該注意的是,子域不能訪問主域DB。

有了這些限制,我想出了以下解決方案:首先我將域cookie設置爲.mydomain.com,這樣我就可以訪問子域上的會話cookie。接下來,我在主域上實現一個簡單的API調用,它將返回登錄狀態以及其他會話信息。 API url將IP白名單限制在子域服務器上,並且一旦登錄用戶從主域名到達子域名,就會向用戶cookie服務器側(cURL假設)請求API url。一旦並且如果用戶在子域上以這種方式被認證,則他被分配用於特定會話的令牌,並且從那裏開始,我可以將其作爲子域上的常規和單獨的會話來管理。

現在我的問題是,您是否可以在此設置中看到任何安全智能漏洞?或提出任何改進或更可取的方法來做到這一點...

感謝

+2

順便說一句,我寫了一篇關於[無OAuth或SAML的跨域認證](https://paragonie.com/blog/2016/02/one-login-rule-them-all-seamless-and-secure交叉域認證),使用Halite。 –

+0

謝謝,這是一個有趣的閱讀。從我所收集的內容來看,我描述的機制大致類似於您在博客文章中描述的內容,只是更簡單(並且沒有加密),再加上使用db存儲的令牌來查找用戶肯定更好。比共享從主域上的cookie。 –

回答

0

對於我來說,我想我會使用單點登錄的概念。一旦用戶通過任何域或子域登錄,爲該用戶生成訪問權限,即登錄。 之後,使用相同的訪問令牌來檢查和驗證用戶不同的域名,而不是使用單獨的會話。這可能會導致會話劫持並難以管理多個會話。一旦創建會話,分配訪問令牌和訪問規則。這將使登錄過程無縫進行,並且易於管理。

欲瞭解更多信息,請查看搜索單一登錄或OAuth 2.0協議。

+0

感謝您的建議,不幸的是,在當前的情況下實施這一做法並不現實,這就是爲什麼我選擇了我的問題中描述的解決方案 –