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

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