CAS及客户端Acegi的安装配置指南

来源:百度文库 编辑:神马文学网 时间:2024/04/29 21:44:17
作者:龙智 (Dragon)时间:2006-07-09
         CASCentral Authentication Service)是耶鲁大学开发的一个开源的SSOsingle sign on,单点登录)系统。它提供了丰富的客户端库,如Java, .NET, PHP, Perl等版本,使用这些库用户可以方便地给自己的应用程序加上CAS支持。Acegi security system for SpringSpring的一个子项目,它为Java EE开发者提供了一个易于使用的提供认证和授权服务的安全框架。Acegi支持CAS,也可看作是CAS的一个Java版的Client    以下详细介绍如何配置CAS以及应用程序,使其利用AcegiCAS进行用户的登录和认证。我将以acegi-security-1.0.1发布包中附带的acegi-security-sample-tutorial应用为例,它使用DaoAuthenticationProvider对用户进行认证,用户帐号和权限信息保存在一个properties文件中,我将对其进行改造,改造之后,acegi-security-sample-tutorial使用CAS进行用户认证,授权信息仍从该properties文件读取,因为CAS只负责认证,不负责授权,所以授权工作交由客户端Acegi来完成,CAS的用户源配置为数据库,利用JDBC进行读取。本文需要读者对SSOAcegi有一定的了解。

       一.准备工作

  • 下载并安装Tomcathttp://tomcat.apache.org/),本文使用的版本是5.5.15
  • 下载并安装MySQLhttp://www.mysql.com/),本文使用的版本是5.0.16
  • 下载CAS服务端(http://www.ja-sig.org/products/cas/),本文使用最新的3.0.5RC2
  • 下载CAS-JDBC Adapter http://developer.ja-sig.org/maven/cas/jars/cas-server-jdbc-3.0.5-rc2.jar);
  • 下载Acegihttp://acegisecurity.org/,本文使用的版本是1.0.1 

   二.安装CAS

   解压缩cas-server-3.0.5-rc2.zip,拷贝target目录中的cas.war%CATALINA_HOME%/webapps下即可。运行Tomcat,访问http://localhost:8080/cas应可看到CAS登录界面。        

       三.配置Tomcat支持SSL

       由于CAS要求使用https和客户端进行通信,所以需要配置Tomcat支持SSL,首先介绍如何制作自签名证书以及将其导入到证书库。1. keytool -keystore keystore -alias acegisecurity -genkey -keyalg RSA -validity 9999 -storepass password -keypass passwordWhat is your first and last name?  [Unknown]:  localhost其他随便填写即可。2. keytool -export -v -rfc -alias acegisecurity -file acegisecurity.txt -keystore keystore -storepass password3. copy acegisecurity.txt %JAVA_HOME%\jre\lib\security   4. copy keystore %CATALINA_HOME %5. cd %JAVA_HOME%\jre\lib\security6. keytool -import -v -file acegisecurity.txt -keypass password -keystore cacerts -storepass changeit -alias acegisecurity       接下来,用编辑器打开%CATALINA_HOME%/conf/server.xml,找到                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"               enableLookups="false" disableUploadTimeout="true"               acceptCount="100" scheme="https" secure="true"               clientAuth="false" sslProtocol="TLS" />       这一行默认是被注释掉的,取消注释,并加入keystoreFile="keystore" keystorePass="password"这两个属性,注意keystoreFile属性可以使用keystore文件的绝对路径,也可使用基于%CATALINA_HOME%环境变量的相对路径,keystorePass是访问keystore的密码,应和上面制作证书时设定的密码保持一致。       访问https://localhost:8443,应弹出一个对话框,告知用户正要访问的站点的证书不安全,是否接受,确认接受,应可看到那只熟悉可爱的小猫。

   四.改造acegi-security-sample-tutorial

       解压缩acegi-security-1.0.1.zip,拷贝acegi-security-sample-tutorial.war%CATALINA_HOME%/webapps目录下,重启tomcatacegi-security-sample-tutorial即已发布。现在我们将其改造为使用CAS进行用户的登录和认证。    用编辑器打开WEB-INF/applicationContext-acegi-security.xml,找到                                                                                            将其替换为:                                                                                    其中,authenticationFailureUrl是认证失败时显示的页面,acegi-security-sample-tutorial登录失败时会在登录页(acegilogin.jsp)显示失败原因,现改为使用CAS之后,acegi-security-sample-tutorial使用CAS的登录页面,故acegilogin.jsp可去掉。接下来,找到                                                                      替换为:                                                               https://localhost:8443/cas/login                                                                                                         再接下来,找到                                                                                                                                                                                                                                                                                                      修改为,并添加以下bean                                                                                                                                                                                                                                              some_unique_key                                                                    https://localhost:8443/cas/proxyValidate                                                                                                                     https://localhost:8443/acegi-security-sample-tutorial/j_acegi_cas_security_check                                                                                                                                                                                                                                                                                                                        改造完毕! 

    五.配置CAS使用JDBC数据源进行用户认证

       CAS默认设置为只要用户名和密码相同,即可进行登录,这在现实使用中是不允许的。我们修改为使用MySQLtest数据库中的app_user表作为用户数据源。首先,我们在test库中创建一个表:CREATE TABLE `app_user` (  `username` varchar(30) NOT NULL default ‘‘,  `password` varchar(45) NOT NULL default ‘‘,  PRIMARY KEY  (`username`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;并添加如下用户:INSERT INTO `app_user` (`username`,`password`) VALUES  (‘dianne‘,‘emu‘), (‘marissa‘,‘koala‘), (‘peter‘,‘opal‘), (‘scott‘,‘wombat‘);用编辑器打开%CATALINA_HOME%/webapps/cas/WEB-INF/deployerConfigContext.xml,找到    注释掉该行,在其下加入:                                                                             并添加一个bean           com.mysql.jdbc.Driver       jdbc:mysql://localhost:3306/test       test       test    拷贝cas-server-jdbc-3.0.5-rc2.jarmysql-connector-java-3.1.12-bin.jar%CATALINA_HOME%/webapps/cas/WEB-INF/lib下。     重新启动tomcat,在浏览器中输入http://localhost:8080/acegi-security-sample-tutorial,你会发现,一旦你访问了受保护的页面,请求就会被重定向到CAS的登录页面,登录成功之后请求会被再被定向到最初访问的页面,如果有多个系统,在这些系统之间进行切换将不会要求用户重新登录,这就达到了单点登录的目的.

 

参考文献:

  • Acegi security官方网站及文档:http://acegisecurity.org
  • CAS官方网站及文档:http://www.ja-sig.org/products/cas
  • SSL Configuration HOW-TO:http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html
  • 利用CAS实现SSO技术:http://kb.csdn.net/java/Articles/200606/2e082aae-775d-48be-b2fb-c2e218af9ba9.html