CAS server3.3.3 source code 粗解)

來源:互聯網
上載者:User

項目需要,對CAS的原始碼做了一番瞭解,記錄下來,以備日後可以比較容易地找到思路。

 

     首先是理解CAS用來滿足的需求,CAS需要提供CAS1.0和2.0兩種協議,這個在http://www.jasig.org/cas/protocol中有敘述,但並不是很有條理。在CAS Client .net版本的網站上倒是非常精鍊。(http://www.middleware.vt.edu/doku.php?id=middleware:cas:protocol)簡言之,CAS1.0提供了plain text格式的response,CAS2.0提供了xml格式的,另外,CAS2.0最大的不一樣是提供了proxy ticket的功能,就是一個service可以代表使用者對另外一個service進行訪問,而無需使用者的互動。在CAS2.0中又分為普通的xml response和符合saml標準的response,其不同之處在於,普通xml response只需要含有userid的資訊即可,而saml response可以含有多個attributes,用戶端可以按照約定進行解析。用下來覺得CAS2.0 saml比較實用,可以傳遞email地址,以及許可權資訊等。(如果對CAS2.0的普通xml response稍加修改也能達到同樣效果,但是手工加進去的,如果attributes名字或數量有變化還要再手工修改)

 

     其次,要瞭解CAS代碼的大體結構,就需要知道程式執行的大概順序。為了達到SSO的效果以及安全性,CAS在使用者輸入使用者名稱密碼點擊提交按鈕之後,將做兩次互動,第一次根據使用者名稱密碼驗證情況,成功的話發送一個含有TGT的cookie給瀏覽器,然後CAS Server讀取這個cookie,檢查其中的TGT是不是由CAS Server發出的,如果是那麼就由TGT產生ST,返回帶有ST的參數及值。用戶端此時拿到ST之後,向CAS的/serviceValidate或者/samlValidate發出驗證請求,CAS返回具體的驗證資訊,包括使用者名稱,email,許可權等等,登入結束。

 

    根據上述大致流程,理解代碼就要容易一些。整個代碼的入口在CentralAuthenticationServiceImpl(上述兩次互動通過spring webflow實現,每一步的action都是來調用這個類),在webflow流程中,ServiceValidateController將request中的資訊通過 CasArgumentExtractor提取出來l組合成SimpleWebApplicationServiceImpl類(父類是 service->principal)。對使用者名稱密碼的驗證由AuthenticationManagerImpl實現,在驗證通過之後,由credentialsToPrincipalResolvers將具體需要拿到的各種屬性取出,封裝成SimplePrincipal類(父類為principal)。驗證完畢後,返回的是ImmutableAuthentication類,這個類攜帶了SimplePrincipal。然後由TicketGrantingTicketImpl產生TGT,包括產生時間,到期策略等等。下一步由TGT產生ST,發送回用戶端。

 

     CAS代碼的結構特點,在代碼的結構中,多次用到abstract類,這種類繼承了一個或幾個介面,實現了其中的部分方法。最終的實作類別繼承這種abstract類以及介面,以此實現對不同協議需求類型的映射。在使用過程中,對此種類的調用,都採用注入方式,引用的都是其介面,從而實現由配置即可確定提供何種服務的目標,非常值得借鑒。

 

     另外,通過閱讀代碼,瞭解其結構,我也做了一些狗尾繼貂的改動。本項目需要提供soap api,但需要有許可權控制,如果單獨寫一套也是可以的,可既然已經有了CAS便想利用現有的東西。soap api和CAS client在邏輯上最大的不同是cookie,因為調用soap api的用戶端可能性很多,能不能存cookie是不一定的。這樣的話,CAS的認證過程就被打破了,也稱不上sso了。不過好在soap api的要求也不高,只要求能登入,能控制許可權即可,不需要和網頁部分的登入發生聯絡。

 

     需求明確之後,只要在原有代碼上做減法即可。看看uml圖以及代碼便基本瞭解了方向,只要利用CAS的幾樣東西,一個是到資料庫去取使用者資訊,一個是產生ticket並保持一段時間。所以,我把原有的東西簡化了一下,再利用xfire便得到了具有開發soap api登入功能的CAS。

 

     CAS的代碼用文字描述實在不是一件容易的事,需要uml圖協助理解。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.