[学习] 使用 CAS 实现 SSO 实践过程

本文详细介绍了一种流行的单点登录(SSO)解决方案——CAS的配置步骤。包括配置必需的软件环境、Tomcat的SSL启用、CASServer的安装、CASClient的部署等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  前一段时间曾经研究过一段关于 SSO 的技术,也深知 SSO(Single Sign-On) 是一个博大精深的主题,而我们通常提起的仅仅是所谓的 WebApp SSO,其主要特点是SSO 应用之间走Web协议 ( 如 HTTP/SSL) ,并且 SSO 都只有一个登录入口,SSO 的核心就是所谓的单点登录和身份认证。

  CAS(Central Authentication Service) 是 Yale 大学发起的一个开源项目,据统计,大概每 10 个采用开源构建 Web SSO 的 Java 项目,就有 8 个使用 CAS 。对这些统计,我虽然不以为然,但有一点可以肯定的是,CAS 是我认为最简单实效,而且足够安全的 SSO 选择。前一段时间正好做了配置 CAS 的实践,记下主要步骤,以供日后参考。

1.系统配置

以下是必需的软件环境:
1. JDK 1.4.2 or higher
2. Tomcat 5.X
3. JSSE-1_X(安装方法可见下载包)

2. Tomcat 配置,启用SSL

a. 在要安装CAS的机器上为Tomcat生成用于SSL通讯的密钥:%JAVA_HOME%/bin/keytool -genkey -alias tomcat -keyalg RSA
这时需要输入密钥密码和其他参数(第一个参数CN必须设置为CAS机器名,这里架设为 james-huang,本机使用localhost测试),会在系统用户目录中生成.keystore密钥文件。

b. 导出别名为tomcat的密钥文件:%JAVA_HOME%/bin/keytool -export -file /path/server.crt -alias tomcat 这时需要输入上一步设定的密码,结果会在/path/目录生成server.crt信任状。

c. 为客户端的JVM导入密钥::%JAVA_HOME%/bin/keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file /path/server.crt -alias tomcat 注意:输入密码时密码为"changeit",这是默认密码。

d. 修改服务端Tomcat配置文件,启用SSL:修改$CATALINA_HOME/conf/server.xml,去掉有关SSL的那一段的注释,需要在connector字段中加 keystorePass="password"(password即为1、2步中的密码),keystoreFile="keystorePath"(可以把第一步生成的.keystore复制到$CATALINA_HOME/conf/下,这样keystoreFile="conf/.keystore")。重启Tomcat,测试 https://james-huang:8443 是否可以访问(推荐将服务器填上Server的机器名)。

3. CAS Server安装

下载CAS Server 3.0.6(可到耶鲁大学官方站或者到 http://www.ja-sig.org/products/cas/ 下载),将其中的cas.war复制到$CATALINA_HOME/webapps下(当然现在CAS中的用户密码认证是很简陋的,产品化必须重写这部分代码,生成新的cas.war)。这时,重启Tomcat应该就可以通过访问 https://james-huang:8443/cas 看到CAS的登录界面了。

4. CAS Client 部署

建议自己创建一个Project以便进行试验(架设工程名为 casclient),下载最新版本的Yale Java CAS Client(2.0.11)并将casclient.jar复制到这两个项目的WEB-INF目录的lib下。修改两个项目的WEB-INF/web.xml,添加如下的过滤器:

代码:
<!--  CAS Filters  -->  
< 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://james-huang:8443/cas/login </ param-value >  
</ init-param > <!-- 这里的james-huang是服务端的主机名 -->  
< init-param >  
< param-name > edu.yale.its.tp.cas.client.filter.validateUrl </ param-name >  
< param-value > https://james-huang:8443/cas/proxyValidate </ param-value >  
</ init-param > <!-- 这里的james-huang是服务端的主机名,而且必须是 -->  
< init-param >  
< param-name > edu.yale.its.tp.cas.client.filter.serverName </ param-name >  
< param-value > client:port </ param-value > <!-- client:port就是需要CAS需要拦截的地址和端口,一般就是Client端的IP和port -->  
</ init-param >  
</ filter >  

< filter-mapping >  
< filter-name > CASFilter </ filter-name >  
< url-pattern > /* </ url-pattern >  
</ filter-mapping >  
  这样,重启Client端的Tomcat并访问 http://client-ip:8080/casclient,你就会被重定向到Server端的CAS登陆页;此时你可测试登录(默认的认证Handler只要求username=password,可任意选择用户名);登录后就会进入casclient的欢迎页面了;继续定位到 http://client-ip:8080/casclient,执行任何一个例子也不用再输入密码。

  至此,全部架设过程及测试完毕。当然,这仅仅是一个测试过程,若要实际环境中我们需要到数据库验证用户有效性,我们必须借助到用户数据库。首先,我们需要创建自己的数据库验证器,当然也可以使用Jasig提供的cas-server-jdbc.jar,通常我们会修改cas-server- jdbc的源码满足自己的需要,并把mysql的jdbc驱动和修改后的jar部署到%CAS%/WEB_INF/lib/下。具体的过程不在这里赘述,有兴趣的朋友可以自己研究一下。

5. 补充:1、在多台机器上部署CAS的时候要注意,这些部署的机器必须在同一个域中。2、若在配置过程中出现一些Exception,像“keytool 别名已存在”这些的出错提示,一般都是由于证书导入未成功造成的,若重新生成证书,导入到客户端的同时别忘了把server端的.keystore文件重新拷贝到Tomcat中去,石头就是由于忘记了这个步骤还调试了老半天呢:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值