`

CAS实战(cas-server-3.3.4 + cas-client-3.1.3)一

    博客分类:
  • CAS
阅读更多

CAS in Action(cas-server-3.3.4 + cas-client-3.1.3)

纠结了2,终于把CAS的第一个例子搭起来了网上找了N多文档,都不太适用,特别是在client的配置方面因为我用的是 3.1.3,网上大部分是2.X版本的以前的老版本是耶鲁实验室开发的,但是3.X(具体啥版本开始我也不清楚…)是由jasig开发的,代码结构完全变了

下面发一些我的配置方式,server的配置网上基本都有,但是为了文档的完整性,免得大家到处找,我就粘过来吧,2.x的配置方式也粘过来.废话不多说了,开始正文:

相关的jar包可以在www.apache.org   www.jasig.org    www.springsource.org上找到

http://blog.csdn.net/cxy1238/archive/2009/10/11/4653345.aspx   这个是我当时参考的文章,上面有一些中文乱码的解决方案(我还没试过…),更改数据源及密码加密方式,下面我也会讲到我的代码,文章中用的是MD5

CAS 介绍

CAS Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 2004 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:

  • 开源的企业级单点登录解决方案。
  • CAS Server 为需要独立部署的 Web 应用。
  • CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

CAS 原理和协议

从结构上看,CAS 包含两个部分: CAS Server CAS ClientCAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。图1 CAS 最基本的协议过程:
1. CAS 基础协议

CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。对于访问受保护资源的每个 Web 请求,CAS Client 会分析该请求的 Http 请求中是否包含 Service Ticket,如果没有,则说明当前用户尚未登录,于是将请求重定向到指定好的 CAS Server 登录地址,并传递 Service (也就是要访问的目的资源地址),以便登录成功过后转回该地址。用户输入认证信息,如果登录成功,CAS Server 随机产生一个相当长度、唯一、不可伪造的 Service Ticket,并缓存以待将来验证,之后系统自动重定向到 Service 所在地址,并为客户端浏览器设置一个 Ticket Granted CookieTGC),CAS Client 在拿到 Service 和新产生的 Ticket 过后,与 CAS Server 进行身份核实,以确保 Service Ticket 的合法性。

在该协议中,所有与 CAS 的交互均采用 SSL 协议,确保,ST TGC 的安全性。协议工作过程中会有 2 次重定向的过程,但是 CAS Client CAS Server 之间进行 Ticket 验证的过程对于用户是透明的。

另外,CAS 协议中还提供了 Proxy (代理)模式,以适应更加高级、复杂的应用场景,具体介绍可以参考 CAS 官方网站上的相关文档。

 

CAS架设环境

Windows
Tomcat 6.x
JDK 1.6
CAS server 3.34
cas-client-2.0.11(
是耶鲁大学的那个版本,不是最新版,3.1.3的配置方式在后面讲解)

 

配置CAS服务端

 

部署cas-server

下载最新的cas-server-3.3.4.zip 服务器端,解压后找到cas-server-webapp.war,将这个war进行解压到tomcatwebapps目录下.

将刚才解压出的目录cas-server-webapp进行重命名为cas

启动tomcat 输入http://localhost:8080/cas/login 查看是否成功部署

下载地址: http://www.jasig.org/

推荐环境:JDK1.6 tomcat 6.0

 

配置数据源和身份验证

用户的认证信息通常保存在数据库中,我们这里使用的是jtds数据库连接。

将前面下载的cas-server-3.3.4.zip 包解开后,在 modules 目录下可以找到包cas-server-support-jdbc-3.3.4.jar,再下载个jtdsjar包,将两个包拷贝到cas\WEB-INF\lib目录下

DataStore 依赖于 spring.jar, commons-collections.jar, commons-dbcp.jar, commons-pool.jar

apachespring官方网找到这四个包把它们拷贝到cas\WEB-INF\lib

cas-server-support-jdbc-3.3.4.jar包中,提供了 3 个基于 JDBC AuthenticationHandler,分别为 BindModeSearchDatabaseAuthenticationHandler, QueryDatabaseAuthenticationHandler, SearchModeSearchDatabaseAuthenticationHandler

我们这里使用的是QueryDatabaseAuthenticationHandler,它是通过配置一个 SQL 语句查出密码,与所给密码匹配

根据密码加密方式的不同,我们需要实现PasswordEncoder接口,来对输入的密码进行加密才能与数据库中的密码比较

建立一个项目,导入cas-server-core-3.3.4.jar

在项目中写个类实现org.jasig.cas.authentication.handler.PasswordEncoder接口中的public String encode(String arg0)方法,这是用来输入的密码加密的。

项目导出成jar包,拷贝到cas\WEB-INF\lib

根据不同的密码加密方式实现,我这里是SHA加密,下文仅为参考,请根据需求变化

新建个caspasskey项目,包名随便我这有2个类,DigestUtil是加密算法的实现类,CASPasswordEncoder是我们要重写的CAS加密类

源码为:

14
0
分享到:
评论
3 楼 qq376727939 2012-03-24  
没有源码么,郁闷,楼主能发下源码么qq376727939@163.com
2 楼 kswwhyk 2011-01-27  
非常不错
1 楼 hw_alex 2009-12-31  
写的很详细

相关推荐

Global site tag (gtag.js) - Google Analytics