首頁/ 汽車/ 正文

單點登入CAS整合原理和應用驗證

單點登入 (SingleSign-On,SSO) ,是一種幫助使用者快捷訪問網路中多個站點的安全通訊技術。單點登入系統基於一種安全的通訊協議,該協議透過多個系統之間的使用者身份資訊的交換來實現單點登入。使用單點登入系統時,使用者只需要登入一次,就可以訪問多個系統,不需要記憶多個口令密碼。

雲程平臺支援CAS、OAuth2、JWT三種主流的單點登入技術,客戶可根據需求選擇對應技術方案。

一、CAS總體架構介紹

CAS(Central Authentication Service)是 Yale大學發起的一個企業級的、開源的專案,旨在為 Web 應用系統提供一種可靠的單點登入解決方法。CAS的目標是允許使用者訪問多個應用程式只提供一次使用者憑據(如使用者名稱和密碼)。

CAS 體系包含兩個部分: CAS Server 和 CAS Client。CAS Server 需要獨立部署,主要負責對使用者的認證工作;CAS Client 負責處理對客戶端受保護資源的訪問請求,需要登入時,重定向到 CAS Server。

單點登入CAS整合原理和應用驗證

CAS 具有以下特點:

一個開放的,文件齊全的協議。

開源的JAVA伺服器元件。

CAS Client 支援非常多的客戶端(這裡指單點登入系統中的各個 Web 應用),包括 Java, 。Net, PHP, Perl, Apache, uPortal, Ruby 等。

文件社群化和實現的支援。

具有廣泛的客戶群的支援。

CAS官方文件:https://apereo。github。io/cas/5。3。x/index。html#

二、CAS單點原理和整合流程

在 CAS 的整個登入過程中,有三個重要的概念。

TGT:

TGT 全稱叫做 Ticket Granting Ticket,這個相當於我們平時所見到的 HttpSession 的作用,使用者登入成功後,使用者的基本資訊,如使用者名稱、登入有效期等資訊,都將儲存在此。

TGC:

TGC 全稱叫做 Ticket Granting Cookie,TGC 以 Cookie 的形式儲存在瀏覽器中,根據 TGC 可以幫助使用者找到對應的 TGT,所以這個 TGC 有點類似與會話 ID。

ST:

ST 全稱是 Service Ticket,這是 CAS Sever 透過 TGT 給使用者發放的一張票據,使用者在訪問其他服務時,發現沒有 Cookie 或者 ST ,那麼就會 302 到 CAS Server 獲取 ST,然後會攜帶著 ST 302 回來,CAS Client 則透過 ST 去 CAS Server 上獲取使用者的登入狀態。

CAS的單點登入SSO流程如下, 應用系統要做單點登入,需要跟CAS服務進行整合,首先要理解CAS整合流程和原理。

單點登入CAS整合原理和應用驗證

使用者透過瀏覽器訪問應用1,應用1 發現使用者沒有登入,於是返回 302,並且攜帶上一個 service 引數,讓使用者去 CAS Server 上登入。

瀏覽器自動重定向到 CAS Server 上,CAS Server 獲取使用者 Cookie 中攜帶的 TGC,去校驗使用者是否已經登入,如果已經登入,則完成身份校驗(此時 CAS Server 可以根據使用者的 TGC 找到 TGT,進而獲取使用者的資訊);如果未登入,則重定向到 CAS Server 的登入頁面,使用者輸入使用者名稱/密碼,CAS Server 會生成 TGT,並且根據 TGT 簽發一個 ST,再將 TGC 放在使用者的 Cookie 中,完成身份校驗。

CAS Server 完成身份校驗之後,會將 ST 拼接在 service 中,返回 302,瀏覽器將首先將 TGC 存在 Cookie 中,然後根據 302 的指示,攜帶上 ST 重定向到應用1。

應用1 收到瀏覽器傳來的 ST 之後,拿去 CAS Server 上校驗,去判斷使用者的登入狀態,如果使用者登入合法,CAS Server 就會返回使用者資訊給 應用1。

瀏覽器再去訪問應用2,應用2 發現使用者未登入,重定向到 CAS Server。

CAS Server 發現此時使用者實際上已經登入了,於是又重定向迴應用2,同時攜帶上 ST。

應用2 拿著 ST 去 CAS Server 上校驗,獲取使用者的登入資訊。

在整個登入過程中,瀏覽器分別和 CAS Server、應用1、應用2 建立了會話,其中,和 CAS Server 建立的會話稱之為全域性會話,和應用1、應用2 建立的會話稱之為區域性會話;一旦區域性會話成功建立,以後使用者再去訪問應用1、應用2 就不會經過 CAS Server 了。

三、CAS服務端如何部署

雲程平臺對CAS 5。3。x版本無縫整合,並對CAS認證校驗進行了擴充套件,專案上請使用平臺提供的CAS 5。3。x執行包。執行CAS之前需要在資料庫先執行平臺的指令碼,CAS獲取使用者資訊需訪問平臺的SYS_USER表。

1 修改資料庫連線

開啟 cas\WEB-INF\classes\application。properties

修改如下配置:

#資料庫配置

spring。datasource。driver-class-name=com。mysql。jdbc。Driverspring。datasource。url=jdbc:mysql://127。0。0。1:3306/yuncheng2021?characterEncoding=UTF-8&useUnicode=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghaispring。datasource。username=rootspring。datasource。password=rootspring。datasource。type=org。apache。commons。dbcp2。BasicDataSourcespring。jpa。database=mysqlspring。jpa。show-sql=truespring。jpa。hibernate。ddl-auto=updatespring。jpa。properties。hibernate。dialect=org。hibernate。dialect。MySQL5Dialect

2 啟動cas

需要準備tomcat,把cas包放到tomcat/webapps目錄下,在tomcat/bin目錄下執行startup。bat(windows)或startup。sh(linux)。

啟動成功後訪問cas地址,介面如下圖所示:

單點登入CAS整合原理和應用驗證

四、雲程如何對接CAS

平臺後端CAS配置

雲程平臺後端已整合CAS程式碼,在yml配置檔案中配置cas服務地址即可。

application。yml 進行如下配置:

#cas單點登入cas:prefixUrl: http://cas。example。org:8443/cas

平臺前端CAS配置

修改public/config/bootConfig。js

VUE_APP_SSO設定為true

VUE_APP_CAS_BASE_URL配置單點登入服務地址

//單點登入是否開啟VUE_APP_SSO:true,//單點登入地址VUE_APP_CAS_BASE_URL:“http://cas。example。org:8443/cas”

相關文章

頂部