[SSO技术]CAS在tomcat下的部署和定制(上篇)
转自:http://hi.baidu.com/zh_m_zhou/blog/item/a6236da5765bd6f09052ee8f.html 作者:pocky
引言 SSO,即Single sign on/off,单点登录/退出。 CAS,全称JA-SIG Central Authentication Service,实现SSO的开源项目。
说明 CAS的相关文档在网上可谓铺天盖地,可是对于企图搭架构起CAS服务的新手,往往会发现,介绍理论的文章没有结合操作;介绍操作的文章又缺胳膊断腿,并不能真正按部就班的架构起一个完整的单点登录/退出的服务。 本文就将以操作步骤为主,尽可能完整的讲述一个cas的客户端和服务端在tomcat下部署和配置的过程,至于理论知识,请读者自行搜索,或者参考文章末尾的参考资料。
环境 Windows XP JDK1.5 Tomcat6.0 准备1 安装JDK,eclipse,tomcat 准备2 到CAS官方站点下载CAS的客户端和服务器端 官方地址为:http://www.ja-sig.org/products/cas/ 下载页面为:http://www.ja-sig.org/products/cas/downloads/index.html 到下载页面下载以下3个zip包: 第一个,CAS Server,这个是CAS的服务器端(当前最新版本是3.3.1) 第二个,JA-SIGCAS Java Client,这个是官方开发的CAS的客户端,用于单点退出。特别注意事项:当前只有这个客户端(JA-SIGCAS Java Client)的3.1.2及以上版本支持单点退出(当前最新版本是3.1.3) 第三个,Yale CAS Client,这个是耶鲁大学开发的CAS的客户端,用于单点登录,不支持单点退出(当前最新版本是2.0.11) 下载后的ZIP包安放于c:/resource/cas目录下,分别解压于当前目录。
准备工作结束,开始正式操作。 步骤1:制作密钥 开始-运行-CMD 先测试一下,键入:(键入尖括号右面的代码。尖括号不要键入,下同) >keytool 如果没有出现帮助说明,说明Path没有配置,如何配置不会的自己baidu。 配置好了重新打开CMD窗口,转到c:/resource/cas目录下。 怎么转?好吧,不会的按照下面的代码键入: >c: >cd/ >cd resource/cas 接下来开始生成密钥,键入: >keytool -genkey -alias tomcat -keystore ./mykeystore -keyalg RSA -validity 2000 password:changeit Common Name/Your Name:localhost 剩下的随便输入 确认,输入"yes",中文的话输入"是" 最后,使用密码相同,直接回车 操作成功的话,会在c:/resource/cas目录下产生一个mykeystore的文件 继续键入: >keytool -export -alias tomcat -keystore ./mykeystore -file server.crt Keystore password:changeit 操作成功的话,会在c:/resource/cas目录下产生一个server.crt的文件 继续键入: >keytool -import -alias tomcat -file ./server.crt -keystore %JAVA_HOME%/jre/lib/security/cacerts Keystore password:changeit 特别说明:这个%JAVA_HOME%是指tomcat需要使用的JDK,当然,如果按照本文后面的用eclipse里配置的tomcat,那%JAVA_HOME%就是eclipse中tomcat所配置的JDK,如果你配到其他的jdk上,到后面实际访问服务端的时候会出现异常:unable to find valid certification path to requested target tomcat所配置的JDK是哪个?不知道?查看eclipse中tomcat所配置的JDK的方法: Eclipse下菜单window-preperences-myEclipse-servers-tomcat-tomcat6-jdk-tomcat JDK name,这个tomcat JDK name对应的是window-preperences-java-installed JREs下的name属性,其对应的location就是jdk的路径了。 至此,步骤1完成。 步骤2:配置tomcat 打开%TOMCAT_HOME%/conf/server.xml,其中有这么一段代码 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> 这段代码当前状态是被注释掉的,将他打开,并完善成如下代码: <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="c:/resource/cas/mykeystore " keystorePass="changeit"/> 注意事项:其中的keystoreFile="c:/resource/cas/mykeystore" ,配置上后此文件不可被删除,不然tomcat会报错:找不到此文件。 保存关闭文件,步骤2完成。 步骤3:配置CAS服务端 在c:/resource/cas/cas-server-3.3.1-release/cas-server-3.3.1/modules目录下,有个cas-server-webapp-3.3.1.war的war包,复制到%TOMCAT_HOME%/webapps目录下,并更名为cas_server.war 因为我们刚才配置的是eclipse使用的JDK,所以现在通过eclipse启动tomcat 访问http://localhost:8080/cas_server,出现登录页面,说明部署成功。 尝试下登录,用户名和密码相同就可以登录成功。 步骤4:配置CAS客户端 在eclipse中新建一个web工程,名字:cas_client1 将c:/resource/cas/cas-client-2.0.11/cas-client-2.0.11/java/lib/casclient.jar复制到工程cas_client1的lib下面(用于单点登录) 将c:/resource/cas/cas-client-3.1.3-release/cas-client-3.1.3/modules目录下的cas-client-core-3.1.3.jar复制到工程cas_client1的lib下面(用于单点退出) 将c:/resource/cas/cas-client-3.1.3-release/cas-client-3.1.3/modules目录下的commons-logging-1.1.jar复制到工程cas_client1的lib下面(用于单点退出) 在工程cas_client1的web.xml中增加如下代码:
<!-- 用于单点退出 --> <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> </listener> <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 Filter</filter-name> <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name> <param-value>https://localhost:8443/cas_server/login</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> <param-value>https://localhost:8443/cas_server/serviceValidate</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name> <param-value>localhost:8080</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Single Sign Out Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CAS Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 注意事项:web.xml中的filter要注意先后顺序,CAS Single Sign Out Filter相关配置要放在原先配置的CAS Filter的前面(至少filter-mapping要在前面) 至此,步骤4完成。 测试:同时将cas_client1和cas_server发布一下,访问http://localhost:8080/cas_client1,将自动跳转到服务端的登录页面,填写相同的用户名和密码,则成功登录并跳转回客户端的。 步骤5:单点登录和退出 按照步骤4 的流程,再创建web工程,名字:cas_client2 同时部署server,client1,client2 测试1:访问client1,登录后可以直接访问client2 测试2:访问client2,登录后可以直接访问client1 测试3:登录client1,退出后可以不可访问client1和client2 如何退出?访问https://localhost:8443/cas_server/logout就退出了。 注意事项:访问形如http:// localhost:8080/cas_server/logout,这种通过http方式访问退出是不行的!!因为你不通过https来注销,CAS Server怎么"杀"掉它通过https发给你的TGC Cookie? 至此,步骤5完成,基本完成单点登录和退出功能。
<上篇完> |
<script></script>