簡介:這是PHP版單點登陸實現方案的詳細頁面,介紹了和php,有關的知識、技巧、經驗,和一些php源碼等。
class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=323140' scrolling='no'>
摘要:
本文主要介紹了利用webservice,session,cookie技術,來進行通用的單點登入系統的分析與設計。具體實現語言為PHP。單點登入,英文名為Single Sign On,簡稱為 SSO,是目前企業,網路業務的使用者綜合處理的重要組成部分。而SSO的定義,是在多個應用系統中,使用者只需要登陸一次就可以訪問所有相互信任的應用系統。
動機:
用過uctenter的全站登入方式的朋友,應該都知道這是典型的觀察者模式的解決方案。使用者中心作為subject, 其所屬observer的註冊和刪除統一在ucenter的後台進行。而各個子應用網站都對應一個observer。每次使用者中心的登入動作,都會觸發js指令碼回調w3c標準的子站登入介面(api/uc.php)。
這種方式的缺點,本人認為主要是兩點:1. 子網站過多時,回調介面相應增多,這個在分布子站的量的限制上,如何控制來使登入效率不會太低,不好把握; 2. 當某個子站回調介面出現問題時,預設的登入過程會卡住(可以限制登入程式的執行時間,但相應出現問題子站後面的子站的回調介面就調不到了。
基於以上問題,在實際開發過程中,本人設計了另一套單點登入系統。
一. 登陸原理說明
單點登入的技術實現機制:當使用者第一次訪問應用系統1的時候,因為還沒有登入,會被引導到認證系統中進行登入;根據使用者提供的登入資訊,認證系統進行身份效驗,如果通過效驗,應該返回給使用者一個認證的憑據--ticket;使用者再訪問別的應用的時候,就會將這個ticket帶上,作為自己認證的憑據,應用系統接受到請求之後會把ticket送到認證系統進行效驗,檢查ticket的合法性。如果通過效驗,使用者就可以在不用再次登入的情況下訪問應用系統2和應用系統3了。
可以看出,要實現SSO,需要以下主要的功能:
a) 所有應用系統共用一個身份認證系統;
b) 所有應用系統能夠識別和提取ticket資訊;
c) 應用系統能夠識別已經登入過的使用者,能自動判斷目前使用者是否登入過,從而完成單點登入的功能
基於以上基本原則,本人用php語言設計了一套單點登入系統的程式,目前已投入正式產生伺服器運行。本系統程式,將ticket資訊以全系統唯一的 session id作為媒介,從而擷取當前線上使用者的全站資訊(登陸狀態資訊及其他需要處理的使用者全站資訊)。
二. 過程說明:
登陸流程:
1. 第一次登陸某個站:
a) 使用者輸入使用者名稱+密碼,向使用者驗證中心發送登入請求
b) 當前登入網站,通過webservice請求,使用者驗證中心驗證使用者名稱,密碼的合法性。如果驗證通過,則產生ticket,用於標識當前會話的使用者,並將當前登陸子站的網站標識符記錄到使用者中心,最後
c) 將擷取的使用者資料和ticket返回給子站。如果驗證不通過,則返回相應的錯誤狀態代碼。
d) 根據上一步的webservice請求返回的結果,當前子站對使用者進行登陸處理:如狀態代碼表示成功的話,則當前網站通過本站cookie儲存 ticket,並本站記錄使用者的登入狀態。狀態代碼表示失敗的話,則給使用者相應的登入失敗提示。
2. 登陸狀態下,使用者轉到另一子:
a) 通過本站cookie或session驗證使用者的登入狀態:如驗證通過,進入正常本站處理常式;否則戶中心驗證使用者的登入狀態(發送ticket到使用者驗證中心),如驗證通過,則對返回的使用者資訊進行本地的登入處理,否則表明使用者未登入。
登出流程
a) 當前登出站清除使用者本站的登入狀態 和 本地儲存的使用者全站唯一的隨機id
b) 通過webservice介面,清除全站記錄的全站唯一的隨機id。webservice介面會返回,登出其他已登入子站的javascript代碼,本站輸出此代碼。
c) js代碼訪問相應站W3C標準的登出指令碼
三. 代碼說明:
本文所涉及到相關代碼,已打包上傳,如有興趣,可在本文最後下載連結處點擊下載。
“PHP版單點登陸實現方案”的更多相關文章 》
愛J2EE關注Java邁克爾傑克遜視頻站JSON線上工具
http://biancheng.dnbcw.info/php/323140.html pageNo:16