Liferay Portal学习<四>
(一) 初探CAS SSO相关概念:
SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。
要实现SSO,需要以下主要的功能:
1、所有应用系统共享一个身份认证系统。
统一的认证系统是SSO的前提之一。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行效验,判断其有效性。
2、所有应用系统能够识别和提取ticket信息
要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对ticket进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。
cas是耶鲁大学开发的一个开源项目,含义为集中认证服务(Central Authentication Service),
目标为:当耶鲁大学有新的应用系统上线时,这个应用系统只需要配置使用cas来保护它的资源受限访问,而不需要 这个应用系统本身再编写安全方面的代码。
SSO相关的Ticket知识
资源准备
Tomcat6
CAS Server&Client
http://www.ja-sig.org/downloads/cas/cas-server-3.1.1-release.zip
http://www.ja-sig.org/downloads/cas-clients/cas-client-java-2.1.1.zip
开始实践
CAS Server 是一套基于 Java 实现的服务,该服务以一个 Java Web Application 单独部署在与 servlet2.3 兼容的 Web 服务器上,另外,由于 Client 与 CAS Server 之间的交互采用 Https 协议,因此部署 CAS Server 的服务器还需要支持 SSL 协议。当 SSL 配置成功过后,像普通 Web 应用一样将 CAS Server 部署在服务器上就能正常运行了,不过,在真正使用之前,还需要扩展验证用户的接口。
(一) 创建证书
首先对SSL的安全协议生成一个证书. 在CMD命令下依次执行下面命令或者放在一个bat文件中,一次执行.
keytool -delete -alias tomcat -keypass changeit -storepass changeit
keytool -genkey -alias tomcat -keypass changeit -keyalg RSA -storepass changeit
keytool -export -alias tomcat -keypass changeit -file server.crt -storepass changeit
keytool -delete -alias mykey -keypass changeit -storepass changeit -keystore " C:/Program Files/Java/jdk1.5.0_10/jre/lib/security/cacerts "
keytool -import -file server.crt -keypass changeit -storepass changeit -keystore " C:/Program Files/Java/jdk1.5.0_10/jre/lib/security/cacerts "
keytool -genkey -alias tomcat -keypass changeit -keyalg RSA -storepass changeit
keytool -export -alias tomcat -keypass changeit -file server.crt -storepass changeit
keytool -delete -alias mykey -keypass changeit -storepass changeit -keystore " C:/Program Files/Java/jdk1.5.0_10/jre/lib/security/cacerts "
keytool -import -file server.crt -keypass changeit -storepass changeit -keystore " C:/Program Files/Java/jdk1.5.0_10/jre/lib/security/cacerts "
这样就生成了一个证书,并且导入进密钥库,相关证书的生成使用方法和命令的使用请使用百度 O(∩_∩)O哈哈~
在生成证书的时候会提示 输入CN,这里必须输入域名,如果在本地请使用机器名或者localhost,不能用IP,否则部署不成功会出现下面的异常.
严重: edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator prox
yList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://192.168.1.111:8443/cas/proxyValidate] ticket=[ST-0-9h7Mx5HK3pfsdxRv
MD3y] service=[http%3A%2F%2F192.168.1.222%3A8080%2Fservlets-examples%2Fservlet%2FHelloWorldExample] renew=false]]]
这个CAS异常是从CAS Client里面抛出,是当我们不使用证书的CN去访问域名的时候,CASClient无法信任,特别注意!!
(二) 配置CASServer
在Tomcat6目录下配置支持https协议,修改 \Tomcat 6.0\conf\server.xml 文件,找到https段,如下配置
1
<
Connector
protocol
="org.apache.coyote.http11.Http11Protocol"
2 port ="8443" minSpareThreads ="5" maxSpareThreads ="75"
3 enableLookups ="true" disableUploadTimeout ="true"
4 acceptCount ="100" maxThreads ="200"
5 scheme ="https" secure ="true" SSLEnabled ="true"
6 keystoreFile ="C:/Documents and Settings/Administrator/.keystore" keystorePass ="changeit"
7 truststoreFile ="C:/Program Files/Java/jdk1.5.0_10/jre/lib/security/cacerts"
8 clientAuth ="false" sslProtocol ="TLS" />
2 port ="8443" minSpareThreads ="5" maxSpareThreads ="75"
3 enableLookups ="true" disableUploadTimeout ="true"
4 acceptCount ="100" maxThreads ="200"
5 scheme ="https" secure ="true" SSLEnabled ="true"
6 keystoreFile ="C:/Documents and Settings/Administrator/.keystore" keystorePass ="changeit"
7 truststoreFile ="C:/Program Files/Java/jdk1.5.0_10/jre/lib/security/cacerts"
8 clientAuth ="false" sslProtocol ="TLS" />
解压cas-server-3.3-release.zip,并将\cas-server-3.0.5\cas-server-3.0.5\target\cas.war放到\Tomcat 6.0\webapps下
然后启动Tomcat6,在浏览器中输入 https://localhost:8443/cas 出现CASServer登录界面,即CASServer配置成功.
(三) 配置一个应用到CAS SSO中
在应用工程中加入casclient.jar,修改web.xml,过滤器应配置在所有其他过滤器的前面
1
<
filter
>
2 < filter-name > CASFilter </ filter-name >
3 < filter-class > edu.yale.its.tp.cas.client.filter.CASFilter </ filter-class >
4 < init-param >
5 < param-name > edu.yale.its.tp.cas.client.filter.loginUrl </ param-name >
6 < param-value > https://soho:8443/cas/login </ param-value >
7 </ init-param >
8 < init-param >
9 < param-name > edu.yale.its.tp.cas.client.filter.validateUrl </ param-name >
10 < param-value > https://soho:8443/cas/proxyValidate </ param-value >
11 </ init-param >
12 < init-param >
13 < param-name > edu.yale.its.tp.cas.client.filter.serverName </ param-name >
14 < param-value > soho:8443 </ param-value >
15 </ init-param >
16 </ filter >
17
18 < filter-mapping >
19 < filter-name > CASFilter </ filter-name >
20 < url-pattern > /* </ url-pattern >
21 </ filter-mapping >
2 < filter-name > CASFilter </ filter-name >
3 < filter-class > edu.yale.its.tp.cas.client.filter.CASFilter </ filter-class >
4 < init-param >
5 < param-name > edu.yale.its.tp.cas.client.filter.loginUrl </ param-name >
6 < param-value > https://soho:8443/cas/login </ param-value >
7 </ init-param >
8 < init-param >
9 < param-name > edu.yale.its.tp.cas.client.filter.validateUrl </ param-name >
10 < param-value > https://soho:8443/cas/proxyValidate </ param-value >
11 </ init-param >
12 < init-param >
13 < param-name > edu.yale.its.tp.cas.client.filter.serverName </ param-name >
14 < param-value > soho:8443 </ param-value >
15 </ init-param >
16 </ filter >
17
18 < filter-mapping >
19 < filter-name > CASFilter </ filter-name >
20 < url-pattern > /* </ url-pattern >
21 </ filter-mapping >
启动应用,输入访问应用的路径会发现没有经过CASServer的认证,不能直接访问到,而跳到了CAS的登录界面,登录后才会被引导到正确的路径.
简单的CAS SSO 初探成功,再来对他进行深入的使用!