一、CAS是什么?
CAS(Central Authentication Service)是 Yale 大學發起的一個企業級的、開源的項目,旨在為 Web 應用系統提供一種可靠的單點登錄解決方法(支持WEB及客戶端)。
CAS 開始於 2001 年, 並在 2004 年 12 月正式成為 JA-SIG 的一個項目。
二、主要特性
1、開源的、多協議的 SSO 解決方案; Protocols : Custom Protocol 、 CAS 、 OAuth 、 OpenID 、 RESTful API 、 SAML1.1 、 SAML2.0 等。
2、支持多種認證機制: Active Directory 、 JAAS 、 JDBC 、 LDAP 、 X.509 Certificates等;
3、安全策略:使用票據( Ticket )來實現支持的認證協議;
4、支持授權:可以決定哪些服務可以請求和驗證服務票據( Service Ticket );
5、提供高可用性:通過把認證過的狀態數據存儲在 TicketRegistry 組件中,這些組件有很多支持分布式環境的實現, 如: BerkleyDB 、 Default 、 EhcacheTicketRegistry 、 JDBCTicketRegistry 、 JBOSS TreeCache 、 JpaTicketRegistry 、 MemcacheTicketRegistry 等;
6、支持多種客戶端: Java 、 .Net 、 PHP 、 Perl 、 Apache, uPortal 等。
三、CAS原理
關於原理網上已有很多資料。如:http://www.cnblogs.com/shanyou/archive/2009/07/14/1523671.html
本次博文主要講解CAS如何與WINDOWS的ACTIVE DIRECTORY進行結合。因為網上大部分的資料都是與LDAP整合,而ACTIVE DIRECTORY也是基於LDAP協議的。
1、運行環境:
window 8.1 + tomcat 8.0.30 + JDK 1.8 + CAS SERVER 4.0 +CAS Java Client + CAS .NET Client(包含example)
2、部署:
-
- 將tomcat復制為三份,分別為tomcat-cas,tomcat-app1,tomcat-app2
(本次tomcat-server沒用使用https的方式,如何將https修改成http請自行網上搜索。另https的配置需要證書,通過java的keytools工具進行生成或購買的證書。)
-
- 修改各tomcat端口號(tomcat-cas保持原始端口號)
tomcat-app1:
tomcat-app2:
-
- 將Cas Server 4.0 RELEASE解壓,在module中cas-server-webapp.war復制到tomcat-server webapps目錄下。
-
- 建立Java Web工程,將Cas Java Client工程引用(當然可以通過Maven的方式)。
-
- 配置Cas Client web.xml
<!-- ========================單點登錄開始 ======================== --> <!--用於單點退出,該過濾器用於實現單點登出功能,可選配置 --> <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> </listener> <!--該過濾器用於實現單點登出功能,可選配置。 --> <filter> <filter-name>CASSingle Sign OutFilter</filter-name> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> </filter> <filter-mapping> <filter-name>CASSingle Sign OutFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>CASFilter</filter-name> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <init-param> <param-name>casServerLoginUrl</param-name> <param-value>http://localhost:8080/cas/login</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:8081</param-value> </init-param> </filter> <filter-mapping> <filter-name>CASFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--該過濾器負責對Ticket的校驗工作,必須啟用它 --> <filter> <filter-name>CASValidationFilter</filter-name> <filter-class> org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter </filter-class> <init-param> <param-name>casServerUrlPrefix</param-name> <param-value>http://localhost:8080/cas</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:8081</param-value> </init-param> </filter> <filter-mapping> <filter-name>CASValidationFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 該過濾器負責實現HttpServletRequest請求的包裹, 比如允許開發者通過HttpServletRequest的getRemoteUser()方法獲得SSO登錄用戶的登錄名,可選配置。 --> <filter> <filter-name>CASHttpServletRequest WrapperFilter</filter-name> <filter-class> org.jasig.cas.client.util.HttpServletRequestWrapperFilter </filter-class> </filter> <filter-mapping> <filter-name>CASHttpServletRequest WrapperFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 該過濾器使得開發者可以通過org.jasig.cas.client.util.AssertionHolder來獲取用戶的登錄名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 --> <filter> <filter-name>CASAssertion Thread LocalFilter</filter-name> <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class> </filter> <filter-mapping> <filter-name>CASAssertion Thread LocalFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- ========================單點登錄結束 ======================== -->
-
- 發布Cas Java Client到tomcat-app1和tomcat-app2
-
- 配置cas-server(可根據官網進行配置)
找到cas-server下deployerConfigContext.xml。
其中LADP相對應的配置值是通過cas.properties進行配置
配置已結束。此次配置中用戶登錄主要是通過AD中的UPN進行匹配登錄。
-
- 運行各tomcat(通過tomcat下bin目錄下startup命令,window是startup.bat。 linux或mac下使用startup.sh)
-
- Cas .NET Client配置(ExampleWebSite工程下web.config)
-
- 運行測試
.NET Client運行未登錄
點擊登錄會自動跳轉到cas-server登錄頁,進行登錄:
登錄后會自動跳轉到.NET CLIENT客戶端,在客戶端上並顯示當前登錄的信息。
直接訪問tomcat-app1和tomcat-app2,會自動登錄並獲取到當前的登錄用戶。
點擊任一系統中的注銷(http://localhost:8080/cas/logout):
再訪問.Net Client,登錄系統會自動被注銷