溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP成長記(三) —— SSO單點登錄/登出

發(fā)布時間:2020-06-10 22:01:16 來源:網絡 閱讀:10243 作者:村長愛技術 欄目:web開發(fā)

      你有沒有遇到過公司每一個產品,都要開發(fā)一個用戶系統(tǒng),浪費開發(fā)成本不說,用戶體驗還不好,用戶要記住每一個產品的用戶密碼,每個產品都要重復登錄,問題重重,要是能登錄一次別的一些列產品就都登錄了那該多好,SSO(Single Sign On)單點登錄,能幫你解決這些問題。

      我在這里來說一下單點登錄實現(xiàn)原理,希望能讓大家對單點登錄更了解,并應用之。我這里以phpCAS的例子來說講解。

      首先我們想到單點登錄可能是通過在根域下設置一個cookie,然后只要在這個域下的都可以共享cookie,這種方式最大的問題就是不能實現(xiàn)跨域(雖然網上有很多跨域的解決方案,比如header方式,但是各個瀏覽器支持的都不是很好),并且很不安全。所以CAS實現(xiàn)了另一種方式——cas server和cas client分離,也就是說單點登錄服務器單獨部署,其他client調用它,從而實現(xiàn)單點登錄。具體流程如下圖

       PHP成長記(三) ——  SSO單點登錄/登出


1、瀏覽器訪問單點登錄的網站,如果session存在就返回數(shù)據,如果不存在就跳轉到cas server(一個單獨域名的服務)

2、如果有已經登錄過,通過檢測cookie,cas server就會302跳轉通過url返回Ticket(Ticket是隨機且唯一)到網站,如果沒有登錄過,就跳轉到cas server登錄頁面進行登錄,登錄成功設置cookie,然后302跳轉返回Ticket到網站,同時cas server會存儲改Ticket、cookie和網站host的對應關系。

3、 網站接收到Ticket后通過cas server提供的校驗url去校驗Ticket,cas server確認后返回成功,網站把當前的sessionid換成Ticket(session_id(Ticket)),然后返回瀏覽器請求數(shù)據

4、當用戶再訪問網站的時候,就會判斷當前session是否登錄


       單點登錄就說完了,其實沒有太復雜的技術,主要是實現(xiàn)的思想,說完單點登錄大家一定想知道的是如何單點登出呢?接下來我再分析一下單點登出的原理:

       PHP成長記(三) ——  SSO單點登錄/登出

1、用戶點擊登出,網站先清除當前網站的session信息,然后跳轉到cas server退出URL

2、cas server接收到登出請求后刪除cookie或session信息,并且通過單點登錄時候記錄的cookie和host、Ticket對應關系,遍歷host給網站發(fā)送post登出請求(這里有一個Tip,就是在cas server退出頁面通過iframe等方式把向所有host發(fā)出退出請求)

3、網站接收到登出請求后,獲取Ticket,并且把Ticket換成當前的sessionid,模擬用戶登錄,然后銷毀session完成登出


    以上是本人通過研究phpCAS獲得的結論,這個只是最基本的模式,還有很多復雜模式,比如代理模式等等,有經驗的朋友歡迎交流!

                                                                                                                                                                                                       謝謝!




向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI