使用CAS後的用戶認證流程java
示意圖中,CAS相關部分被標示爲藍色。在這個流程中,員工AT向日志系統請求進入主頁面,他的瀏覽器發出的HTTP請求被嵌入在日誌系統中的CAS客戶端(HTTP過濾器)攔截,並判斷該請求是否帶有CAS的證書;若是沒有,員工AT將被定位到CAS的統一用戶登陸界面進行登陸認證,成功後,CAS將自動引導AT返回日誌系統的主頁面。
CAS的程序邏輯實現
要完成上述的認證業務,CAS須要一個認證中心服務器CAS -Server和嵌入在不一樣業務系統方的認證客戶端CAS-Client的協同。
在CAS1.0協議中,CAS-Server提供的三個驗證服務接口(web服務URL):
1. 用戶登陸URL,形如 https://casserver/cas/servlet/login
2. 用戶憑證校驗URL,形如 https://casserver/cas/servlet/validate
3. 用戶登出URL,形如 https://casserver/cas/servlet/logout
在CAS-Client端,CAS提供了多樣化的語言支持,其中用於java的是一個casclient.jar包。目前的版本爲2.1.1,其中提供了三種形式的憑證校驗:
1. 用於Java Servlets的Filter — edu.yale.its.tp.cas.client.filter.CASFilter
2. 用於JSP頁面的CAS Tag Library
3. 通用Java API Object — ServiceTicketValidator / ProxyTicketValidator
一般,企業應用程序基於瀏覽器的B/S模式,這種狀況下,系統的用戶憑證(一個由CAS服務器生成的惟一 id號,也稱之爲ticket)藉助cookie和URL參數方式實現;在B/S環境中,大多狀況下,咱們只須要配置CAS Filter或者使用CAS Tag Library就能夠輕鬆實現的驗證客戶端。
若是應用是以普通的C/S模式運行,則須要應用程序本身來維護這個ticket在上下文環境中的傳輸和保存了。這時候就須要手工調用ServiceTicketValidator / ProxyTicketValidator對象的方法,向CAS 服務器提交認證,並獲取認證結果進行相應的處理。
CAS服務的具體實現
環境假設:用戶User要訪問業務系統Biz;Biz系統部署在bizserver上;CAS的系統搭建在服務器casserver上。web
圖例說明:
Step1: 用戶第一次訪問Biz系統主頁http://bizserver/index.jsp ;部署在Biz系統上的CASFilter發現用戶還沒有登陸,將用戶重定向的CAS登陸界面 https://casserver/cas/servlet/login?service=http://bizserver/index.jsp ,同時在重定向的URL上用service參數將用戶的目標地址傳給CAS服務器。
Step2:用戶在CAS的登陸頁上輸入用戶名密碼登陸,CAS服務器認證經過後,生成一個ticket,並帶在目標地址的尾部返回客戶端的瀏覽器redirect:http://bizserver/index.jsp?ticket=casticket.
Step3:客戶端瀏覽器得到CAS服務器的認證應答,取得憑證ticket後,使用重定向的連接http://bizserver/index.jsp?ticket=casticket訪問Biz服務
Step4: BizServer上的CASFilter再次過濾訪問請求,並得到ticket憑證。Filter將使用該憑證經過URL https://casserver/cas/servlet/validate?service= http://bizserver/index.jsp &ticket=casticket 向CAS認證中心確認對應的服務請求和憑證是否有效。根據CAS服務器返回的結果,若是憑證有效,則CASFilter容許用戶進入http://bizserver/index.jsp 所指向的頁面;不然,再次重定向到https://casserver/cas/servlet/login?service=http://bizserver/index.jsp 上要求用戶進行認證。
CAS2.0服務架構實現:
CAS2.0的協議主要是針對web應用的SSO功能加強的協議,它在1.0協議基礎上擴展了Proxy Authentication(代理認證)能力。那麼什麼是Proxy Authentication呢?!
代理認證Proxy Authentication
假設有一下這樣的應用場景:用戶AT早晨來到公司,他的第一件事就是進入公司的Portal系統瀏覽一天的新諮詢,如股票信息、天氣狀況、業界新聞。他經過CAS的身份認證登陸了門戶系統,看到了他訂製的信息。以後,他要訪問portal中的郵件信息,看看有沒有新的郵件。這時候Portal系統必須訪問他的IMAP服務器,這須要他的私人密碼。咱們知道Portal是經過CAS對AT進行認證的,所以Portal上沒有AT的我的密碼信息。這時,咱們發現,Portal須要表明AT的身份向IMAP服務器提交身份認證,而這正是Proxy Authentication的做用。
CAS2.0系統架構中的角色編程
CAS2.0系統中的用到的憑證(ticket)瀏覽器
以上對於CAS2.0協議中用到的5種ticket的說明,乍看起來也許會讓你雲裏霧裏的。不要緊,下面咱們就來詳細闡述這5種憑證在實際認證流程中的做用。在闡述具體流程前,咱們要先關注一下2.0協議中對客戶端配置的需求.
CAS2.0的客戶端配置
在2.0協議中,CAS-Server端的配置與1.0基本一致。但在客戶端上,多增長了一個call back URL,該URL用來提供server端向client端傳輸PGT時使用。所以,除了要配置edu.yale.its.tp.cas.client.filter.CASFilter做爲認證過濾器外,還要配置edu.yale.its.tp.cas.proxy.ProxyTicketReceptor這個servlet,做爲server回傳PGT的call back URL,以下:安全
CAS2.0代理認證流程
如下的流程圖模擬上述的用戶AT經過Portal向他的IMAP郵件服務器請求電子郵件的認證過程。在該過程當中,充當Service和Proxy兩個角色的Portal使用CAS Filter對訪問其自身的用戶進行CAS認證;同時Portal要使用ProxyTicketReceptor servlet接收來自CAS server的PGT信息,並使用ProxyTicketValidator對象向CAS獲取訪問IMAP服務器的Proxy Ticket憑證;最終從IMAP服務器上獲取AT用戶的mail信息。一樣的,這裏的IMAP服務器也要接受並承認CAS對其用戶的認證管理,同時它本身也成爲二級Proxy,在有須要的狀況下,同樣能夠向它的back-end Service發起Proxy Authentication代理認證請求……服務器
其中藍色線表示HTTP或HTTPS的請求;紅色線表示應答;黑色線表示來自CAS server端的回調操做。
到此,本章節對JA-SIG(CAS)的總體功能和身份認證業務架構進行初步的講解,在後續的章節中,咱們將對CAS平臺的服務端和客戶端的編程與應用定製等相關內容的進行介紹。cookie