跨主域,實現SSO的思路
同一主域(即:同一個一級域名下的所有子域名)下包括多服務器共享SESSION數據實現的方法很多,這裡就不多說了!
現在關鍵的問題是不同主域的SSO的實現!這個問題比較復雜,能實現,但好多都是用一些特殊的軟件系統來支撐的。。。
實際上,SESSION也是需要COOKIE來支持的,COOKIE的不支持跨主域就決定了SESSION不能跨主域!那麼,如何實現跨主域呢???
這又是我在實現我的項目中的SSO時,突然想到的一個簡單的方法,供大家商討
一、假設 有A.COM , B.COM , C.COM 這三個主域,其中 A.COM主要負責驗證通行證(速度比較快), B.COM 和 C.COM都是具體的應用
二、B.COM 和 C.COM 以及 A.COM 自己的一些應用都需要到 A.COM來獲取信任(登陸)
三、為各主域分配一個子域 passport.B.COM、passport.C.COM,它們的IP都指向 A.COM所在的主機地址
四、用戶在登陸通過驗證後,設立一個跳轉規則,以session_id作為參數,逐個跳轉 passport.B.COM、passport.C.COM (實際上這些子域可以建立到A主機的默認站點,通過數組以及一些參數就可以實現逐個快速跳轉),跳轉直接用PHP的 header("Location: passport.B.COM/?sid=xxxxxxxx&i=0"); ,在跳轉的同時,覆蓋當前主域的session_id為傳遞過來的session_id就可以了。
這裡有一些考慮:
1、將各 passport.X.COM分配到同一個速度比較快的主機上,有利於快速跳轉,而用戶看不見復雜跳轉的過程。。。
2、同一主機上跳轉可以避免中間跳轉環節的出錯導致跳轉失敗。
我只在本機模擬多主域上測試過,效果不錯;還沒有在INTERNET的網絡上具體的試驗,請大家有空嘗試一下,並提出更好的 SSO 解決方案 ...