1.cas4.0server端下载地址
迅雷地址:http://developer.jasig.org/cas/cas-server-4.0.0-release.zip
也可以去最新的地址:
https://www.apereo.org/projects/cas/download-cas或者http://developer.jasig.org/cas/选择你需要的下载
2. 部署cas服务
解压cas-server-4.0.0-release.zip后拷贝出cas-server-4.0.0\modules的cas-server-webapp-4.0.0.war到tomcat的webapp目录,重命名为cas
3.创建证书(下面会用到)
证书是单点登录认证系统中很重要的一把钥匙,客户端于服务器的交互安全靠的就是证书;本教程由于是演示所以就自己用JDK自带的keytool工具生成证书;如果以后真正在产品环境中使用肯定要去证书提供商去购买,当然现在也有免费。
keytool -genkey -alias tomcatcas -keystore d://castest -keyalg RSA -validity 3666
详细操作:
因为sso.castest.com不存在,估需要修改hosts文件 (C:\Windows\System32\drivers\etc\hosts)
增加:127.0.0.1 sso.castest.com
4.导出证书
证书导出:
keytool -export -alias tomcatcas -keystore d://castest -file d://tomcatcas.crt
5.为客户端的JVM导入证书
如果命令中存在空格,命令将报错
keytool -import -keystore D:\software\Java\jdk1.8.0_20\jre\lib\security\cacerts -file D:/tomcatcas.crt -alias tomcatcas
注意:这里需要输入密码,此密码不是前面设定的密码,是DK安装后会默认创建一个密钥库,密码为:changeit
D:\software\Java\jdk1.8.0_20\jre\lib\security\ -- 是jre的目录;至此证书的创建、导出、导入到客户端JVM都已完成,下面开始使用证书到Web服务器中
6. 启用Web服务器(Tomcat)的SSL,也就是HTTPS加密协议
打开tomcat目录的conf/server.xml文件,取消开启84和88行左右的注释代码,并设置keystoreFile、keystorePass修改结果如下:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystorefile="D:/wsriakey" keystorepass="castest"/>
参数说明:
- keystoreFile:在第一步创建的key存放位置
- keystorePass:创建证书时的密码
7.简单配置CAS SERVER后进行验证
启动tomcat后浏览器输入http://sso.castest.com:8443/cas/
注意:cas4.0以前主需要用户名和密码相同即可,但是4.0后默认的用户名/密码: casuser/Mellon否则会报“cas Invalid credentials.”提示
成功进入cas登录页面
8. casserver的数据验证配置
需要依赖的jar:c3p0-0.9.1.2.jar,mysql-connector-java-5.1.21.jar,cas-server-support-jdbc-4.0.0.jar拷贝到cas\WEB-INF\lib下
对配置文件修改:
tomcat/webapp/cas/WEB-INF/deployerConfigContext.xml
1).注释默认的简单登录配置
<!--
<bean id="primaryAuthenticationHandler"
class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
<property name="users">
<map>
<entry key="casuser" value="Mellon"/>
</map>
</property>
</bean>
-->
2).增加数据库连接
<!-- Define the DB Connection -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:driverClass="com.mysql.jdbc.Driver"
p:jdbcUrl="jdbc:mysql://127.0.0.1:3306/xxx?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"
p:user="root"
p:password="root" />
<!-- Define the encode method-->
<bean id="passwordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"
c:encodingAlgorithm="MD5"
p:characterEncoding="UTF-8" />
<bean id="dbAuthHandler"
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
p:dataSource-ref="dataSource"
p:sql="select password from xxxx where name=?"
p:passwordEncoder-ref="passwordEncoder"/>
<!-- p:passwordEncoder-ref="passwordEncoder"如果无加密不需要 passwordEncoder bean 与p:passwordEncoder-->
3).更换验证Handle(找到id=authenticationManager的bean)
<bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager">
<constructor-arg>
<map>
<!--
| IMPORTANT
| Every handler requires a unique name.
| If more than one instance of the same handler class is configured, you must explicitly
| set its name to something other than its default name (typically the simple class name).
-->
<entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
<entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver" /> <!-- <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" /> -->
</map>
</constructor-arg>
</bean>
是为了注释掉key-ref="primaryAuthenticationHandler"的部分,然后引入id=dbAuthHandler的bean之后重启tomcat 进行验证.服务端就配置完成
8.客户端配置
1). 增加cas-client的jar包(cas-client-core-3.4.1.jar),有两种方式:
2).客户端所有的web.xml配置
<!-- ======================== 单点登录/登出 ======================== -->
<!-- 该过滤器用于实现单点登出功能,可选配置。 -->
<filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<!-- 该过滤器负责用户的认证工作,必须启用它 -->
<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://localhost:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:8080</param-value>
</init-param>
</filter>
<!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>org.jasig.cas.client.validation.Cas10TicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://localhost:8443/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:8080</param-value>
</init-param>
<init-param>
<param-name>redirectAfterValidation</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- 该过滤器负责实现HttpServletRequest请求的包裹,
比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。
比如AssertionHolder.getAssertion().getPrincipal().getName()。-->
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Authentication Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!-- ======================== 单点登录/登出结束 ======================== -->
9客户端与shiro进行整合配置
1).增加需要的jar包
shiro-cas-1.2.4.jar、cas-client-core-3.4.1.jar(下载参考第8步)
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-cas</artifactId>
<version>1.2.4</version>
</dependency>
2)修改shiro的配置(spring-shiro.xml)
- 修改shiroFilter:
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<!-- 设定角色的登录链接,这里为cas登录页面的链接可配置回调地址 -->
<property name="loginUrl" value="http://sso.castest.com:7443/cas/login?service=http://localhost:8080/admin/login.htm" />
<property name="successUrl" value="http://localhost:8080/admin/index.htm"></property> <!-- 加这句会出现页面循坏重定向 -->
<property name="filters">
<map>
<entry key="casFilter" >
<bean class="org.apache.shiro.cas.CasFilter">
<!--配置验证错误时的失败页面 /main 为系统登录页面 -->
<property name="failureUrl" value="/login.htm" />
</bean>
</entry>
</map>
</property>
<property name="unauthorizedUrl" value="/unauthorized.htm" />
<property name="filterChainDefinitions">
<value>
/favicon.ico = anon
/login.htm = anon
/error/ajaxUnauthorized.htm = anon
/doRegister.htm = anon
/doAjaxLogin.htm = anon
/logout.htm = logout
/service/*.htm=anon
/*.htm= authc
/**/*.htm=authc
</value>
</property>
</bean>
- shiroRealm的配置中添加两个属性,分别为cas服务器的登录地址和cas客户端的入口即会被拦截的地址:
<!--自定义Realm 继承自CasRealm -->
<bean id="shiroJdbcRealm" class="com.lz.core.shiro.ShiroJdbcRealm">
<property name="casServerUrlPrefix" value="http://sso.castest.com:7443/cas/"/> <!-- 一定是ip+port+context path -->
<property name="casService" value="http://localhost:8080/admin/doLogin.htm"/> <!-- 没有这句,认证不会通过,casfilter失败 -->
</bean>
-
在securityManager的配置中加入属性:
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!--设置自定义realm -->
<property name="realm" ref="shiroJdbcRealm" />
<property name="cacheManager" ref="shiroCacheManager" />
<property name="subjectFactory" ref="casSubjectFactory"/> <!-- 增加CasSubject -->
</bean>
-
加入casSubjectFactory Bean的配置
<bean id="casSubjectFactory" class="org.apache.shiro.cas.CasSubjectFactory"/> <!-- 引入CasSubject -->
参考页面
http://dead-knight.iteye.com/blog/1525671
http://blog.csdn.net/zhuojiajin/article/details/42973251
http://blog.csdn.net/ppt0501/article/details/41728819
- 大小: 162.5 KB
- 描述: jdk生成证书
- 大小: 24.2 KB
- 大小: 5.7 KB
- 大小: 28.8 KB
- 大小: 28.5 KB
- 大小: 21.2 KB
分享到:
相关推荐
总结来说,CAS SSO服务器是实现单点登录的关键组件,它简化了多应用系统的身份验证流程,提升了安全性。理解并掌握CAS的工作原理和配置,能帮助我们有效地管理和维护SSO环境,为用户提供便捷且安全的访问体验。
`.net-casSSO-client.rar`提供的程序集`DoNetCasClient.dll`是一个预编译的库,可以直接集成到你的.NET项目中,简化了客户端的开发工作。这个库通常包含以下功能: 1. **登录验证**:客户端库会处理向CAS服务器发送...
CAS(Central Authentication Service,中央认证服务)是一种广泛使用的开源单点登录(Single Sign-On, SSO)协议。SSO允许用户通过一次登录就能访问多个应用系统,而无需为每个系统分别进行身份验证。CAS SSO 提供...
1. **CAS服务器**:这是SSO的核心,负责处理用户的认证请求,验证用户的身份,并向其他应用系统提供认证票证(TGT,Ticket Granting Ticket)。 2. **客户端**:也称为服务提供商,是需要用户认证的Web应用程序。...
在压缩包内的文件" CAS-SSO-TRIAL.doc"很可能是一个详细的文档,提供了关于如何设置和配置CAS服务器,以及如何在Java和.NET环境中实现SSO的步骤和指导。文档可能会涵盖以下关键知识点: 1. **CAS简介**:解释CAS的...
总的来说,"Yale CAS SSO DotNet Client"为.NET开发者提供了一个方便的工具,使他们能够轻松地在自己的应用中实现与Yale CAS服务器的SSO整合。通过理解和掌握这个客户端库的使用,开发者可以提升他们的应用安全性,...
CAS(Central Authentication Service,中央认证服务)是一种广泛使用的开源身份验证框架,旨在提供一种安全的单点登录(Single Sign-On,SSO)解决方案。SSO允许用户通过一次登录,就能访问多个相互信任的应用系统...
"Yale CAS SSO JAVA Client" 是一个专为Java应用程序设计的身份验证服务,它利用了耶鲁大学开发的中央认证服务(Central Authentication Service, CAS)。CAS是一种开放源代码的单点登录(Single Sign-On, SSO)框架...
CAS是一种开放源码的SSO解决方案,它提供了一个中央认证服务器,验证用户凭证并生成票据,允许受保护的应用程序通过验证该票据来确认用户的身份。实现CAS SSO需要: 1. **安装CAS服务器**:在一台服务器上部署CAS...
总的来说,CAS SSO提供了灵活的配置和扩展性,可以根据实际需求调整服务器和客户端的配置,以实现安全、高效的单点登录解决方案。同时,它也允许开发者通过定制处理程序和解析器来获取并处理多样化的用户信息。学习...
3. 实现 SSO:在 Weblogic 服务器中实现 SSO 单点登录,使用 CAS 服务器来验证用户的身份。 使用 YALE CAS 实现 SSO 单点登录可以提供一个安全、可靠的身份验证解决方案,适合大多数的企业应用场景。
CAS(Central Authentication Service,...综上所述,CAS SSO配置涉及到服务器和客户端两部分,需要对Tomcat、SSL证书管理、以及CAS客户端库有深入理解。在实际操作中,务必遵循最佳实践,确保系统的安全性和稳定性。
4. **客户端集成**:每个需要SSO功能的应用需要配置为CAS客户端,这通常涉及修改应用的配置文件,指示它们信任CAS服务器,并处理票证验证。 5. **信任关系建立**:在不同系统之间建立信任,确保CAS服务器能够验证...
CAS(Central Authentication Service)是一种广泛使用的开放源代码的单点登录(SSO)框架,它允许用户通过一个统一的身份验证入口点访问多个应用系统,而无需在每个系统中单独登录。SSO(Single Sign-On)是现代...
CAS SSO 的核心思想是通过一个中心认证服务器来处理所有应用系统的身份验证,从而简化用户登录流程并提高安全性。 CAS 的工作原理如下: 1. 用户尝试访问受保护的应用系统。 2. 应用系统检测到用户未登录,重定向...
Liferay是一款功能强大的开源企业级门户平台...总之,Liferay的CAS SSO实现是通过集成CAS服务器和配置Liferay的安全策略来完成的,这一功能对于多应用环境的企业级门户至关重要,它可以提供便捷、安全的用户登录体验。
【压缩包子文件的文件名称列表】只有一个"sso",这可能表示这个压缩包包含了与CAS SSO服务器相关的所有必要文件,或者包含了一些示例配置或文档,帮助用户更好地理解和使用CAS服务器。在实际操作中,这个文件可能...
综上所述,CAS SSO原理是通过中心化的认证服务器和分散的客户端协同工作,实现了用户只需一次登录即可访问多个应用系统的功能。这种设计既方便了用户,又简化了系统管理员的身份管理,同时保持了一定的安全性。然而...
基于Tomcat6的CAS SSO配置涉及的主要知识点包括SSO(Single Sign-On,单点登录)、CAS(Central Authentication Service,中心认证服务)、SSL(Secure Socket Layer,安全套接层)以及Tomcat服务器的配置。...
CAS-SSO系统架构的核心在于中心服务器(CAS Server)对登录与注销状态的控制。当用户试图访问任何一个子系统时,子系统首先会向中心服务器查询该用户的状态。如果用户已经在中心服务器登录,子系统将接收到来自中心...