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,登陆系统会自动被注销