1、CAS是什麼?html
CAS(Central Authentication Service)是 Yale 大學發起的一個企業級的、開源的項目,旨在爲 Web 應用系統提供一種可靠的單點登陸解決方法(支持WEB及客戶端)。java
CAS 開始於 2001 年, 並在 2004 年 12 月正式成爲 JA-SIG 的一個項目。linux
2、主要特性web
一、開源的、多協議的 SSO 解決方案; Protocols : Custom Protocol 、 CAS 、 OAuth 、 OpenID 、 RESTful API 、 SAML1.1 、 SAML2.0 等。tomcat
二、支持多種認證機制: Active Directory 、 JAAS 、 JDBC 、 LDAP 、 X.509 Certificates等;安全
三、安全策略:使用票據( Ticket )來實現支持的認證協議;session
四、支持受權:能夠決定哪些服務能夠請求和驗證服務票據( Service Ticket );app
五、提供高可用性:經過把認證過的狀態數據存儲在 TicketRegistry 組件中,這些組件有不少支持分佈式環境的實現, 如: BerkleyDB 、 Default 、 EhcacheTicketRegistry 、 JDBCTicketRegistry 、 JBOSS TreeCache 、 JpaTicketRegistry 、 MemcacheTicketRegistry 等;webapp
六、支持多種客戶端: Java 、 .Net 、 PHP 、 Perl 、 Apache, uPortal 等。分佈式
3、CAS原理
關於原理網上已有不少資料。如:http://www.cnblogs.com/shanyou/archive/2009/07/14/1523671.html
本次博文主要講解CAS如何與WINDOWS的ACTIVE DIRECTORY進行結合。由於網上大部分的資料都是與LDAP整合,而ACTIVE DIRECTORY也是基於LDAP協議的。
一、運行環境:
window 8.1 + tomcat 8.0.30 + JDK 1.8 + CAS SERVER 4.0 +CAS Java Client + CAS .NET Client(包含example)
二、部署:
(本次tomcat-server沒用使用https的方式,如何將https修改爲http請自行網上搜索。另https的配置須要證書,經過java的keytools工具進行生成或購買的證書。)
tomcat-app1:
tomcat-app2:
<!-- ========================單點登陸開始 ======================== --> <!--用於單點退出,該過濾器用於實現單點登出功能,可選配置 --> <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-server下deployerConfigContext.xml。
其中LADP相對應的配置值是經過cas.properties進行配置
配置已結束。這次配置中用戶登陸主要是經過AD中的UPN進行匹配登陸。
.NET Client運行未登陸
點擊登陸會自動跳轉到cas-server登陸頁,進行登陸:
登陸後會自動跳轉到.NET CLIENT客戶端,在客戶端上並顯示當前登陸的信息。
直接訪問tomcat-app1和tomcat-app2,會自動登陸並獲取到當前的登陸用戶。
點擊任一系統中的註銷(http://localhost:8080/cas/logout):
再訪問.Net Client,登陸系統會自動被註銷