標籤:blog http io 檔案 資料 2014 log size
分析CAS原理,構建PHP單點登入
單點登入(Single Sign On , 簡稱 SSO )是目前比較流行的服務於企業業務整合的解決方案之一, SSO 使得在多個應用系統中,使用者 只需要登入一次就可以訪問所有相互信任的應用系統。CAS(Central Authentication Service)是一款不錯的針 對 Web 應用程式的單點登入架構,本文根據CAS原理給出了PHP實現單點登入的方法。
假設現在有兩台普通Web伺服器A,B
再假設A,B兩台伺服器上的資源都需要認證使用者才能訪問(當然,使用者註冊,使用者登入等頁面不算在內)
使用者User登入其中一台伺服器,假設是A,有了A伺服器的許可權了,他想訪問B伺服器上的資源,並且不需要再次登入,因為他剛登入了A伺服器,並且沒有退出登入,如何?呢.
其實我們只需要再有一台伺服器C來做登入,登出等操作的驗證服務
訪 問A伺服器登入頁面,伺服器A將頁面重新導向至授權伺服器C,輸入使用者名稱及密碼完成認證,並將授權資訊寫入Session儲存在伺服器C上,伺服器C再將頁 面重新導向,並通過Url的參數形式,將SessionId傳至伺服器A,此時伺服器A再通過SessionId去伺服器C驗證是否該授權資訊並儲存在服務 器A本地,這樣,伺服器A與伺服器C就同時擁有了授權資訊,此時,使用者訪問伺服器B,伺服器B將頁面重新導向至伺服器C,因為瀏覽器儲存了伺服器C的 cookie資訊,所以,伺服器C可以檢測至該使用者已經登入,故不需要再次登入,直接通過Url參數的形式將SessionId以頁面重寫向方式返回至服 務器B,伺服器B用該SessionId串連伺服器C進行驗證,成功後將授權資訊儲存至伺服器B本地,這樣伺服器B也有了與伺服器C相同的授權資訊,不需 要登入
伺服器A,B,C這三台伺服器,需要共用授權資訊,可以是資料庫的方式,記憶體緩衝工具的方式或者其它檔案型資料庫方式共用授權資訊,當使用者在服務A,B其中一台退出登入時,另外兩台(A,C 或 B,C)伺服器的授權資訊同時銷毀
這樣就完成了單點登入,
實現原理參考圖: