Yelu大學研發的CAS(Central Authentication Server)web
下面就以耶魯大學研發的CAS爲分析依據,分析其工做原理。首先看一下最上層的項目部署圖:瀏覽器
部署項目時須要部署一個獨立的認證中心(cas.qiandu.com),以及其餘N個用戶本身的web服務。服務器
認證中心:也就是cas.qiandu.com,即cas-server。用來提供認證服務,由CAS框架提供,用戶只須要根據業務實現認證的邏輯便可。cookie
用戶web項目:只須要在web.xml中配置幾個過濾器,用來保護資源,過濾器也是CAS框架提供了,即cas-client,基本不須要改動能夠直接使用。session
一、CAS的詳細登陸流程框架
上圖是3個登陸場景,分別爲:第一次訪問www.qiandu.com、第二次訪問、以及登陸狀態下第一次訪問mail.qiandu.com。網站
下面就詳細說明上圖中每一個數字標號作了什麼,以及相關的請求內容,響應內容。編碼
1.一、第一次訪問www.qiandu.comurl
標號1:用戶訪問http://www.qiandu.com,通過他的第一個過濾器(cas提供,在web.xml中配置)AuthenticationFilter。3d
過濾器全稱:org.jasig.cas.client.authentication.AuthenticationFilter
主要做用:判斷是否登陸,若是沒有登陸則重定向到認證中心。
標號2:www.qiandu.com發現用戶沒有登陸,則返回瀏覽器重定向地址。
首先能夠看到咱們請求www.qiandu.com,以後瀏覽器返回狀態碼302,而後讓瀏覽器重定向到cas.qiandu.com而且經過get的方式添加參數service,該參數目的是登陸成功以後會要重定向回來,所以須要該參數。而且你會發現,其實server的值就是編碼以後的咱們請求www.qiandu.com的地址。
標號3:瀏覽器接收到重定向以後發起重定向,請求cas.qiandu.com。
標號4:認證中心cas.qiandu.com接收到登陸請求,返回登錄頁面。
上圖就是標號3的請求,以及標號4的響應。請求的URL是標號2返回的URL。以後認證中心就展現登陸的頁面,等待用戶輸入用戶名密碼。
標號5:用戶在cas.qiandu.com的login頁面輸入用戶名密碼,提交。
標號6:服務器接收到用戶名密碼,則驗證是否有效,驗證邏輯可使用cas-server提供現成的,也能夠本身實現。
上圖就是標號5的請求,以及標號6的響應了。當cas.qiandu.com即csa-server認證經過以後,會返回給瀏覽器302,重定向的地址就是Referer中的service參數對應的值。後邊並經過get的方式挾帶了一個ticket令牌,這個ticket就是ST(數字3處)。同時會在Cookie中設置一個CASTGC,該cookie是網站cas.qiandu.com的cookie,只有訪問這個網站纔會攜帶這個cookie過去。
Cookie中的CASTGC:向cookie中添加該值的目的是當下次訪問cas.qiandu.com時,瀏覽器將Cookie中的TGC攜帶到服務器,服務器根據這個TGC,查找與之對應的TGT。從而判斷用戶是否登陸過了,是否須要展現登陸頁面。TGT與TGC的關係就像SESSION與Cookie中SESSIONID的關係。
TGT:Ticket Granted Ticket(俗稱大令牌,或者說票根,他能夠簽發ST)
TGC:Ticket Granted Cookie(cookie中的value),存在Cookie中,根據他能夠找到TGT。
ST:Service Ticket (小令牌),是TGT生成的,默認是用一次就生效了。也就是上面數字3處的ticket值。
標號7:瀏覽器從cas.qiandu.com哪裏拿到ticket以後,就根據指示重定向到www.qiandu.com,請求的url就是上面返回的url。
標號8:www.qiandu.com在過濾器中會取到ticket的值,而後經過http方式調用cas.qiandu.com驗證該ticket是不是有效的。
標號9:cas.qiandu.com接收到ticket以後,驗證,驗證經過返回結果告訴www.qiandu.com該ticket有效。
標號10:www.qiandu.com接收到cas-server的返回,知道了用戶合法,展現相關資源到用戶瀏覽器上。
至此,第一次訪問的整個流程結束,其中標號8與標號9的環節是經過代碼調用的,並非瀏覽器發起,因此沒有截取到報文。
1.二、第二次訪問www.qiandu.com
上面以及訪問過一次了,當第二次訪問的時候發生了什麼呢?
標號11:用戶發起請求,訪問www.qiandu.com。會通過cas-client,也就是過濾器,由於第一次訪問成功以後www.qiandu.com中會在session中記錄用戶信息,所以這裏直接就經過了,不用驗證了。
標號12:用戶經過權限驗證,瀏覽器返回正常資源。
1.三、訪問mail.qiandu.com 同理
二、總結
至此,CAS登陸的整個過程就完畢了,之後有時間總結下如何使用CAS,並運用到項目中。