關於單點登錄的原理

之前面試被問到單點登錄的實現原理,這個我是做過的,可能是緊張的原因和一些不可或說的原因,當時回答的不好,今天靜下心來好好捋了捋思路,一回想自己面試過程中回答的確實不好。

其實單點登錄很簡單

單點登錄的技術實現機制:當用戶第一次訪問應用系統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標準的登出腳本


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章