耶魯大學開發(fā)的單點登錄(Single Sign On)系統(tǒng)稱為CAS(Central Authentication Service),是一個獨立于平臺的,易于理解的開源軟件,支持代理功能。Spring Framework的Acegi安全系統(tǒng)支持CAS,并提供了易于使用的方案。
CAS的設(shè)計目標
l、為多個Web應(yīng)用提供單點登錄基礎(chǔ)設(shè)施,同時可以為非Web應(yīng)用但擁有Web前端的功能服務(wù)提供單點登錄的功能;
2、簡化應(yīng)用認證用戶身份的流程;
3、將用戶身份認證集中于單一的Web應(yīng)用,讓用戶簡化他們的密碼管理,從而提高安全性;而且,當應(yīng)用需要修改身份驗證的業(yè)務(wù)邏輯時,不需要到處修改代碼;
CAS的設(shè)計和實現(xiàn)
CAS(Central Authentication Server)被設(shè)計成一個獨立的Web應(yīng)用。它目前的實現(xiàn)是運行在HTTPS服務(wù)器上的幾個Java Servlet。通過三個URL來訪問:Login URL,Validation URL和可選的Logout URL。下圖是CAS的單點登錄流程示意圖:

為了使用CAS,Web應(yīng)用重定向它的用戶(或簡單地創(chuàng)建一個超鏈接)到Login URL,例如
https://secure.its.yale.edu/cas/servlet/login。用戶也可以手工訪問這個URL,如果希望預(yù)先驗證會話。
Login URL處理初步的認證工作,它提示用戶輸入NetID和密碼,并用Kerberos服務(wù)器校驗它們是否匹配。為了接下來能自動重新驗證用戶身份,CAS也會試圖給瀏覽器回送Cookie(瀏覽器關(guān)閉后會自動過期)。這個Cookie用于識別已經(jīng)成功登錄的用戶身份。
使用這個可選的Cookie,CAS可以為用戶實現(xiàn)對于多個Web應(yīng)用單點登錄的效果。這就是說,用戶只需輸入一次他的NetID和密碼,即可訪問任何使用CAS的資源服務(wù)。沒有這個Cookie,當Web應(yīng)用重定向用戶到CAS時,用戶每次都要輸入NetID和密碼。(用戶也可以通過訪問Logout URL,如
https://secure.its.yale.edu/cas/servlet/logout,來要求CAS刪除這個Cookie。)
為了處理初步的身份認證,CAS也記錄了用戶被重定向時訪問的service。可以這樣做是因為CAS要求重定向或鏈接用戶到Login URL的Web應(yīng)用提供一個service的標志符(在上圖中記為serviceID)。如果驗證成功,CAS創(chuàng)建一個位數(shù)很長的隨機數(shù)(我們稱之為ticket)。CAS把這個ticket和成功登錄的用戶以及用戶要訪問的service聯(lián)系起來。例如,如果用戶peon重定向自service S,CAS創(chuàng)建ticket T,這個ticket T允許peon訪問service S。這個ticket是個一次性的憑證;它僅僅用于peon,僅僅用于service S,并且只能使用一次,使用之后馬上會過期。
一旦完成了初步的身份驗證,CAS重定向用戶瀏覽器回到原來的Web應(yīng)用URL。CAS之所以能記得原來的URL,是因為上面討論的service ID作為一個"callback URL"。CAS重定向用戶的瀏覽器回到原來的URL,并加上上面討論的ticket作為請求參數(shù)。