天天看點

單點登入 cas 設定回調位址_單點登入實作原理

一、單點登入概念

什麼是單點登入

?單點登入全稱

Single Sign On

(以下簡稱

SSO

),

是指在多系統應用群中登入一個系統,便可在其他所有系統中得到授權而無需再次登入,包括單點登入與單點登出兩部分。
使用者登入成功之後,會與sso認證中心及各個子系統建立會話,使用者與sso認證中心建立的會話稱為

全局會話

,使用者與各個子系統建立的會話稱為

局部會話

二、單點登入的兩種方式

1.同域名共享cookie

如果你的所有平台都是在同一個域名下,那麼可以使用

同域名共享cookie

的方式來完成單點登入的資訊共享。

将web應用群中所有子系統的域名統一在一個頂級域名下,例如“*.baidu.com”,然後将它們的cookie域設定為“baidu.com”,這種做法理論上是可以的,甚至早期很多多系統登入就采用這種同域名共享cookie的方式。

  然而,可行并不代表好,共享 cookie 的方式存在衆多局限。首先,應用群域名得統一;其次,應用群各系統使用的技術(至少是web伺服器)要相同,不然cookie的key值(tomcat為JSESSIONID)不同,無法維持會話,共享cookie的方式是無法實作跨語言技術平台登入的,比如java、php、.net系統之間;第三,cookie本身不安全。

  是以,我們需要一種全新的登入方式來實作多系統應用群的登入,這就是單點登入

2、SSO認證授權登入

上一種方法有很大的局限性,如果跨域名,就實作不了,這裡我們可以借助第三方授權來實作。要實作多個平台單點登入,前提是多個平台必須要有一個唯一的賬号,如手機号,郵箱,或使用者名,這樣才可以判斷出是哪個使用者。

具體實作思路

假如公司有兩個不同域名或IP下的管理網站,http://a.com,http://b.com,我們想要輸入使用者名和密碼登入a.com, 即可自動登入http://b.com,怎麼實作呢?

登入http://a.com後會在a平台産生會話資訊,如果我們登入b.com,怎麼判斷該使用者已經登入a平台了,然後自己登入?這裡我們需要借助第三方平台來做授權驗證,即c.com,該授權中心維護一套共有的賬号和密碼,當使用者通路 http://a.com 後,我們會跳轉到 c.com,并帶上http://a.com 這個來源通路位址,在http://c.com 中判斷是否有登入,如果未登入,則給出登入界面,登入成功後,則産生會話資訊,同時生成一個授權Token,儲存在http://c.com cookie 中,然後傳回給原位址,如果已經登入(即已經授權過了),則拿到cookie中儲存的Token資訊然後回跳到原來的通路位址,http://a.com 判斷有Token資訊,則拿着這個Token發送http請求到c.com,判斷該Token是否有效,如果有效,則傳回給使用者資訊,然後http://a.com拿到資訊後,自動登入a.com;

當通路 http://b.com 時,也會去 http://c.com 中判斷是否已經授權過了,因為http://a.com 已經授過權了,則會給http://b.com 傳回授權Token,然後http://b.com 判斷該Token是否有效,如果有效,則會傳回給使用者資訊,http://b.com 自動登入,這就是單點登入的一個簡單的流程。

一個完整的流程圖:

單點登入 cas 設定回調位址_單點登入實作原理
以上内容希望幫助到大家, 很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那裡入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴充、高性能、高并發、伺服器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點進階進階幹貨需要的可以免費分享給大家 ,需要請戳這裡連結 或 者關注咱們下面的知乎專欄

PHP架構師圈子​zhuanlan.zhihu.com

單點登入 cas 設定回調位址_單點登入實作原理

繼續閱讀