1 簡介
單點登錄(Single Sign On ,簡稱SSO)是目前比較流行的服務(wù)于企業(yè)業(yè)務(wù)整合的解決方案之一,SSO 使得在多個應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。
SSO的實現(xiàn)機(jī)制不盡相同,大體分為Cookie機(jī)制和Session機(jī)制兩大類。
Session是一種服務(wù)器端機(jī)制,當(dāng)客戶端訪問服務(wù)器時,服務(wù)器為客戶端創(chuàng)建一個惟一的SessionID,以使在整個交互過程中始終保持狀態(tài),而交互的信息則可由應(yīng)用自行指定,因此用Session方式實現(xiàn)SSO,不能在多個瀏覽器之間實現(xiàn)單點登錄,但卻可以跨域。
Cookie是一種客戶端機(jī)制,它存儲的內(nèi)容主要包括:名稱、值、過期時間、路徑和域,路徑與域合在一起就構(gòu)成了Cookie的作用范圍,因此用Cookie方式可實現(xiàn)SSO,但域名必須相同。
目前大部分SSO產(chǎn)品采用的是Cookie機(jī)制,最好的開源單點登錄產(chǎn)品CAS也是采用Cookie機(jī)制。
CAS(Central Authentication Service)是 Yale大學(xué)發(fā)起的一個企業(yè)級的、開源的項目,旨在為 Web 應(yīng)用系統(tǒng)提供一種可靠的單點登錄解決方法。CAS開始于2001年,并在2004年12月正式成為JA-SIG的一個項目。
2 CAS的特性
1) 開源的、多協(xié)議的SSO解決方案,CAS Server和CAS Client通信支持多協(xié)議,如:CAS、Oauth、OpenID、SAML1.1、SAML2.0D等。
2) 支持多種認(rèn)證機(jī)制:Active Directory、JAAS、JDBC、LDAP、X.509 Certificates等。
3) 安全策略:使用票據(jù)(Ticket)來實現(xiàn)支持的認(rèn)證協(xié)議;
4) 支持多種客戶端:Java、.Net、PHP、Perl、Apache、 uPortal等。
5) 支持授權(quán):可以決定哪些服務(wù)可以請求和驗證服務(wù)票據(jù)(Service Ticket)。
6) 提供高可用性:通過把認(rèn)證過的狀態(tài)數(shù)據(jù)存儲在TicketRegistry組件中,這些組件有很多支持分布式環(huán)境的實現(xiàn)。
3 CAS原理
3.1 體系結(jié)構(gòu)
CAS包含CAS Server和CAS Client兩個部分。
CAS Server負(fù)責(zé)完成對用戶的認(rèn)證工作,需要獨立部署,CAS Server 會處理用戶名/ 密碼等憑證(Credentials)。
CAS Client負(fù)責(zé)處理對客戶端受保護(hù)資源的訪問請求,需要對請求方進(jìn)行身份認(rèn)證時,重定向到CAS Server進(jìn)行認(rèn)證。原則上,客戶端應(yīng)用不再接受任何的用戶名密碼等。CAS Client與受保護(hù)的客戶端應(yīng)用部署在一起,以Filter方式保護(hù)受保護(hù)的資源。
圖1 CAS框架圖
3.2 CAS 協(xié)議
3.2.1 基礎(chǔ)協(xié)議
CAS 基礎(chǔ)協(xié)議執(zhí)行步驟如下:
1) 訪問服務(wù):用戶發(fā)送請求訪問應(yīng)用系統(tǒng)(可稱為CAS客戶端)提供的受保護(hù)的服務(wù)資源。
2) 重定向認(rèn)證:CAS客戶端分析HTTP請求中沒有Service Ticket(即ST)或SessionID,說明用戶還沒有進(jìn)行身份認(rèn)證。于是,重定向用戶請求到CAS服務(wù)器進(jìn)行身份認(rèn)證,并把用戶此次訪問CAS客戶端的URL作為參數(shù)(service)傳遞給CAS服務(wù)器。
3) 用戶認(rèn)證:CAS服務(wù)器接收到身份認(rèn)證請求后轉(zhuǎn)向登錄頁面,用戶提供認(rèn)證信息后進(jìn)行身份認(rèn)證。身份認(rèn)證成功后,CAS服務(wù)器以SSL方式給瀏覽器返回一個TGC(用戶身份信息憑證,用于以后獲取ST)。
4) 發(fā)放票據(jù):CAS服務(wù)器會產(chǎn)生一個隨機(jī)的ST,然后重定向到CAS客戶端。
5) 驗證票據(jù):CAS客戶端收到ST后,向CAS服務(wù)器驗證票據(jù)ST的合法性,驗證通過后,允許用戶訪問客戶端服務(wù)。
6) 傳輸用戶信息:CAS服務(wù)器驗證票據(jù)ST通過后,傳輸用戶認(rèn)證結(jié)果信息給客戶端。
圖2 CAS基礎(chǔ)協(xié)議流程圖
3.2.2 代理協(xié)議
CAS基礎(chǔ)模式已經(jīng)能夠滿足大部分簡單的 SSO 應(yīng)用。現(xiàn)在,我們探討一種更復(fù)雜的情況,即用戶訪問 helloservice, helloservice又依賴于helloservice2 來獲取一些信息,如同:
User -----> helloservice -----> helloservice2。
這種情況下,假設(shè) helloservice2 也是需要對 User 進(jìn)行身份驗證才能訪問,那么,為了不影響用戶體驗(過多的重定向?qū)е?/font> User 的IE 窗口不停地閃動), CAS 引入了一種 Proxy 認(rèn)證機(jī)制,即 CAS Client 可以代理用戶去訪問其它 Web 應(yīng)用。
代理的前提是 CAS Client 要擁有用戶的身份信息 ( 類似TGC ) , 而PGT 就是CAS Client 持有的對用戶身份信息的一種憑據(jù)。憑借 TGC , User 可以獲取訪問其它服務(wù)的ST,所以,憑借 PGT ,CAS Client可以從CAS Server獲取訪問代理應(yīng)用的PT,于是Web 應(yīng)用可以代理用戶去實現(xiàn)后端的認(rèn)證,而無需前端用戶的參與。
如圖3所示, CAS Client 在基礎(chǔ)協(xié)議之上,提供了一個額外的 PGT URL 給 CAS Server。于是,CAS Server 可以通過 PGT URL 提供一個PGT 給 CAS Client 。
圖3 CAS Client獲取PGT流程圖
圖4 CAS Client訪問應(yīng)用流程圖
4 CAS的安全性
CAS的安全性依賴于SSL,并且其安全性要求遠(yuǎn)高于普通的應(yīng)用系統(tǒng)。
4.1 TGC/PGT 安全性
對于一個 CAS 用戶來說,最重要是要保護(hù)它的 TGC ,如果 TGC 不慎被 CAS Server 以外的實體獲得, Hacker 能夠找到該 TGC ,然后冒充 CAS 用戶訪問所有授權(quán)資源。
PGT 跟 TGC 的角色是一樣的,如果被 Hacker 獲得,后果可想而知。
從基礎(chǔ)模式可以看出, TGC 是 CAS Server 通過 SSL 方式發(fā)送給終端用戶,因此,要截取 TGC 難度非常大,從而確保 CAS 的安全性。另外,TGC也有自己的存活周期。下面是 CAS 的 web.xml 中,通過 grantingTimeout 來設(shè)置 CAS TGC 存活周期的參數(shù),參數(shù)默認(rèn)是 120 分鐘,在合適的范圍內(nèi)設(shè)置最小值,太短,會影響 SSO 體驗,太長,會增加安全性風(fēng)險。
<context-param>
<param-name>edu.yale.its.tp.cas.grantingTimeout</param-name>
<param-value>7200</param-value>
</context-param>
4.2 ST/PT 安全性
ST是通過 HTTP 傳送的,所以ST可以被截取到 。CAS 協(xié)議從幾個方面讓 ST變得更加安全。
1) Service Ticket 只能使用一次。CAS 協(xié)議規(guī)定,無論 Service Ticket 驗證是否成功, CAS Server 都會將服務(wù)端的緩存中清除該 Ticket ,從而可以確保一個 Service Ticket 僅被使用一次。
2) ST 在一段時間內(nèi)失效,默認(rèn)5分鐘。
3) ST是隨機(jī)產(chǎn)生的。
5 術(shù)語解釋
CAS系統(tǒng)中設(shè)計了5種票據(jù):TGC、ST、PGT、PGTIOU、PT。
Ticket-granting cookie(TGC):存放用戶身份認(rèn)證憑證的cookie,在瀏覽器和CAS Server間通訊時使用,并且只能基于安全通道傳輸(HTTPS),是CAS Server用來明確用戶身份的憑證。
Service ticket (ST):服務(wù)票據(jù),服務(wù)的惟一標(biāo)識碼,由CAS Server發(fā)出(HTTP傳送),通過客戶端瀏覽器到達(dá)業(yè)務(wù)服務(wù)器端;一個特定的服務(wù)只能有一個惟一的ST。
Proxy-Granting ticket(PGT):由CAS Server頒發(fā)給擁有ST憑證的服務(wù),PGT綁定一個用戶的特定服務(wù),使其擁有向CAS Server申請,獲得PT的能力。
Proxy-Granting Ticket I Owe You(PGTIOU):將通過憑證校驗時的應(yīng)答信息由CAS Server 返回給CAS Client,同時,與該PGTIOU對應(yīng)的PGT將通過回調(diào)鏈接傳給Web應(yīng)用。Web應(yīng)用負(fù)責(zé)維護(hù)PGTIOU與PGT之間映射關(guān)系的內(nèi)容表。
Proxy Ticket(PT):是應(yīng)用程序代理用戶身份對目標(biāo)程序進(jìn)行訪問的憑證。
6 CAS Server與CAS Client的配置與部署
CAS Server與CAS Client的配置與部署詳見:http://www.360doc.com/showweb/0/0/444451531.aspx。
聯(lián)系客服