•相关文档
官方文档:
http://www.ja-sig.org/products/cas/
http://www.ibm.com/developerworks/web/library/wa-singlesign/
http://developer.yahoo.com/auth/
网友学习笔记:
JA-SIG(CAS)学习笔记1 http://linliangyi2007.iteye.com/blog/165307
JA-SIG(CAS)学习笔记2 http://linliangyi2007.iteye.com/blog/165310
JA-SIG(CAS)学习笔记3 http://linliangyi2007.iteye.com/blog/165313
•生成和导入数字证书的步骤:
1. 生成 server keystore
keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore
注意:
keystore里面放什么东西呢?
keystore存放着两种数据:密钥(或公私钥对)和信任证书。信任证书中只包含公钥。
你之后会发现keystore文件比导出的证书server.cer大;例如某示例中server.cer是564字节,而keystore文件是1.3KB。
2. (从keystore)导出证书,并导入到jvm的证书机构中
keytool -export -trustcacerts -alias tomcat -file server.cer -keystore server.keystore -storepass changeit
keytool -import -trustcacerts -alias tomcat -file server.cer -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit
//其他参考指令
//keytool -list -v -keystore %JAVA_HOME%/jre/lib/security/cacerts
//keytool -delete -trustcacerts -alias tomcat -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit
3. 修改conf\server.xml
<Connector protocol="org.apache.coyote.http11.Http11Protocol"
port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="server.keystore"
keystorePass="changeit"/>
注意:
keystoreFile属性是指定keystore的文件路径。
truststoreFile属性是指定信任证书的文件路径。
clientAuth属性设置为false表示单向SSL,一般的都是单向SSL。设置为true表示双向SSL。
4. 部署cas.war到tomat的webapps目录下
5. 配置受管的web应用:
1)casclient.jar拷贝到你所发布的webapp的WEB-INF/lib下
2)在web.xml中加入——
<filter>
<filter-name>CASFilter</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/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/proxyValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>localhost:4040</param-value>
</init-param>
</filter>
注意:
在第1步骤生成keystore需要指定CN:就是服务器的域名(或者是localhost),不能是IP地址。配置CAS客户端的配置参数中的“edu.yale.its.tp.cas.client.filter.serverName”表示验证完毕将跳转到原来的客户端应用。这里可以填IP,例如192.168.2.9:4040;不过记得不要以http://开头。
•CAS验证中心的定制和开发:
需要实现下面的3个步骤:
1. 自定义AuthHandler
自己实现AuthenticationHandler接口,或者利用用户名/密码的方式进行验证的话可以采用extends AbstractUsernamePasswordAuthenticationHandler
2. 修改配置文件
修改cas\WEB-INF\deployerConfigContext.xml,在<property name="authenticationHandlers">中注释掉之前的bean,加上自己自定义的authenticationHandler
3. 定制身份验证登录界面
需要修改以下页面(在cas\WEB-INF\view\jsp\路径下)——
casConfirmView.jsp —— 确认信息(警告信息)页面
casGenericSuccess.jsp —— 登陆成功提示页面
casLoginView.jsp —— 登录输入页面
casLogoutView.jsp —— SSO登出提示页面
•受管web应用的定制和开发:
选择下面步骤的其中之一:
1. 在session中获取用户名
String username = (String)session.getAttribute(CASFilter.CAS_FILTER_USER);
或者
String username = (String)session.getAttribute("edu.yale.its.tp.cas.client.filter.user");
2.获得更完整的受认证用户信息对象CASReceipt Java Bean,可以使用以下语句的任一:
CASReceipt receipt = (CASReceipt )session.getAttribute(CASFilter.CAS_FILTER_RECEIPT);
或者 CASReceipt receipt = (CASReceipt )session.getAttribute("edu.yale.its.tp.cas.client.filter.receipt");
3.手工编码使用CAS Java Object进行用户验证,使用ServiceTicketValidator或者 ProxyTicketValidator(代理认证模式下),在servlet中对用户身份进行验证。