當前位置:名人名言大全網 - 端午節短信 - 什麽是cas認證?

什麽是cas認證?

CAS是Central Authentication Service的縮寫,是壹個獨立開放的命令協議。

CAS是?耶魯嗎?該大學發起的壹個開源項目旨在為Web應用系統提供可靠的單點登錄方法。CAS於2004年6月正式成為JA-SIG的壹個項目。

特性

1,開源企業單點登錄解決方案。

2.CAS服務器是壹個需要獨立部署的Web應用程序。

3.CAS客戶端支持許多客戶端(這裏指單點登錄系統中的各種Web應用程序),包括Java、。NET、PHP、Perl、Apache、Uportal、Ruby等。

原則和協議

從結構上看,CAS由兩部分組成:CAS服務器和CAS客戶端。CAS服務器需要獨立部署,主要負責用戶的認證;

CAS客戶端負責處理對客戶端受保護資源的訪問請求,並在需要登錄時重定向到CAS服務器。圖為CAS最基本的協議流程:

CAS客戶端與受保護的客戶端應用程序壹起部署,以過濾器的方式保護受保護的資源。對於每個訪問受保護資源的Web請求,CAS客戶端會分析請求的Http請求是否包含服務票證。

如果沒有,則意味著當前用戶尚未登錄,因此請求被重定向到指定的CAS服務器登錄地址,並傳遞服務(即要訪問的目標資源的地址),以便在登錄成功後可以將地址傳輸回來。

用戶在步驟3中輸入認證信息。如果登錄成功,CAS服務器會隨機生成壹個長度相當長的唯壹且不可偽造的服務票證,並將其緩存以供將來驗證。

然後系統自動重定向到服務所在的地址,並為客戶端瀏覽器設置壹個票證授予Cookie(TGC)。

在獲得服務和新生成的票證後,CAS客戶端在步驟5和6中與CAS服務器驗證身份,以確保服務票證的合法性。

在該協議中,所有與ca的交互都采用SSL協議來保證ST和TGC的安全。在協議工作期間將有兩個重定向過程,但CAS客戶端和CAS服務器之間的票證驗證過程對用戶是透明的。

此外,CAS協議還提供了代理模式,以適應更高級和復雜的應用場景。詳情請參考中科院官網相關文件。

擴展數據

使用CAS在Tomcat單點登錄中部署客戶端應用程序

單點登錄的目的是使多個相關應用程序使用相同的登錄過程。在解釋過程中,本文構建了兩個簡單的應用程序,以casTest1和casTest2為例,它們都只有壹個頁面顯示歡迎信息和當前登錄用戶名。

這兩個應用程序使用相同的登錄信息集,只有登錄用戶才能訪問它們。通過本文中的配置,實現了單點登錄,即只需登錄壹次即可訪問這兩個應用程序。

與CAS服務器建立信任關系

假設CAS服務器單獨部署在機器A上,客戶端應用部署在機器B上,由於客戶端應用和CAS服務器之間的通信采用SSL,因此需要在A和B的JRE之間建立信任關系..

首先,與機器A壹樣,要在機器B上生成證書,需要配置Tomcat的SSL協議。

其次,下載/Andreas/entry/no _ more _ impossible _ to _ find?InstallCert.java,運行命令“java InstallCert compA:8443”,

並在下壹個查詢中輸入1。

這樣,a被添加到b的信任存儲中。如果多個客戶端應用程序部署在不同的機器上,則每臺機器都需要與CAS服務器所在的機器建立信任關系。

配置CAS過濾器

在準備好應用casTest1和casTest2之後,它們分別部署在B和C機器上。由於casTest1與casTest2、B和C完全等價,因此我們將介紹casTest1在B機器上的配置。

假設A和B的域名分別是domainA和domainB。

將CAS-client-Java-2.1.1 . zip重命名為CAS-client-Java-2.1.jar並將其復制到casTest1/WEB-INF/lib目錄中,修改web.xml文件並添加CAS過濾器,如清單所示。

清單10。添加CAS過濾器

& lt網絡應用程序& gt...& lt過濾器& gt& lt過濾器名稱& gtCAS過濾器& lt/filter-name & gt;

& lt過濾器類& gtedu . Yale . its . TP . cas . client . filter . cas filter & lt;/filter-class & gt;& ltinit-param & gt;

& ltparam-name & gt;edu . Yale . its . TP . cas . client . filter . log in URL & lt;/param-name & gt;& lt參數值& gthttps://domain a:8443/cas/log in & lt;/param-value & gt;

& lt/init-param & gt;& ltinit-param & gt;

& ltparam-name & gt;edu . Yale . its . TP . cas . client . filter . validate URL & lt;/param-name & gt;

& lt參數值& gthttps://domain a:8443/cas/service validate & lt;/param-value & gt;& lt/init-param & gt;

& ltinit-param & gt;& ltparam-name & gt;edu . Yale . its . TP . cas . client . filter . servername & lt;/param-name & gt;

& lt參數值& gt域名b:8080 & lt;/param-value & gt;& lt/init-param & gt;

& lt/filter & gt;& lt過濾器映射& gt

& lt過濾器名稱& gtCAS過濾器& lt/filter-name & gt;

& lturl模式& gt/protected-pattern/* & lt;/URL-pattern & gt;& lt/filter-mapping & gt;

...& lt/we B- app & gt;

所有符合castest 1/protected-pattern/路徑的資源都需要登錄到CAS服務器。如果需要保護整個castest1,可以將url-pattern指定為“/*”。

從清單10可以看出,我們可以為CASFilter指定壹些參數,其中壹些參數是必需的。表1?二年級呢?中的參數分別是必需的和可選的:

表1。Casfilter所需參數

表二。CASFilter可選參數

傳遞登錄用戶名

成功登錄後,CAS將向瀏覽器發回壹個Cookie並設置壹個新的服務票。然而,客戶端應用程序有自己的會話,那麽我們如何獲得每個應用程序中當前登錄用戶的用戶名呢?

CAS客戶端的過濾器已經過處理,成功登錄後可以直接從Session的屬性中獲取,如清單11所示:

清單11。通過Java會話獲取登錄用戶名。

1//以下兩種情況均可接受。

2 session . get attribute(cas filter。CAS _ FILTER _ USER);

3 session . get attribute(“edu . Yale . its . TP . cas . client . filter . user“);

在JSTL獲取用戶名的方法如清單12所示:

清單12。通過JSTL獲取登錄用戶名

1 & lt;c:out value =“$ { session scope【CAS:‘edu . Yale . its . TP . CAS . client . filter . user‘】}“/& gt;

此外,CAS還提供了壹個CASFilterRequestWrapper類,該類繼承自HttpServletRequestWrapper,主要重寫了getRemoteUser()方法。

“edu只要參數。Yale . its . TP . cas . client . filter . wrap request”設置為true時,可以通過getRemoteUser()方法獲取登錄用戶名,如清單13所示:

清單13。通過CASFilterRequestWrapper獲取登錄用戶名。

1?CASFilterRequestWrapper?req wrapper = new CASFilterRequestWrapper(請求);2?out.println(“登錄用戶:“+req wrapper . getremote user()“);

百度百科-中科院

IBM中國-使用CAS在Tomcat中實現單點登錄