项目需要,对CAS的源代码做了一番了解,记录下来,以备日后可以比较容易地找到思路。
首先是理解CAS用来满足的需求,CAS需要提供CAS1.0和2.0两种协议,这个在http://www.jasig.org/cas/protocol中有叙述,但并不是很有条理。在CAS Client .net版本的站点上倒是非常精炼。(http://www.middleware.vt.edu/doku.php?id=middleware:cas:protocol)简言之,CAS1.0提供了plain text格式的response,CAS2.0提供了xml格式的,另外,CAS2.0最大的不一样是提供了proxy ticket的功能,就是一个service可以代表用户对另外一个service进行访问,而无需用户的交互。在CAS2.0中又分为普通的xml response和符合saml标准的response,其不同之处在于,普通xml response只需要含有userid的信息即可,而saml response可以含有多个attributes,客户端可以按照约定进行解析。用下来觉得CAS2.0 saml比较实用,可以传递email地址,以及权限信息等。(如果对CAS2.0的普通xml response稍加修改也能达到同样效果,但是手工加进去的,如果attributes名字或数量有变化还要再手工修改)
其次,要了解CAS代码的大体结构,就需要知道程序执行的大概顺序。为了达到SSO的效果以及安全性,CAS在用户输入用户名密码点击提交按钮之后,将做两次交互,第一次根据用户名密码验证情况,成功的话发送一个含有TGT的cookie给浏览器,然后CAS Server读取这个cookie,检查其中的TGT是不是由CAS Server发出的,如果是那么就由TGT生成ST,返回带有ST的参数及值。客户端此时拿到ST之后,向CAS的/serviceValidate或者/samlValidate发出验证请求,CAS返回具体的验证信息,包括用户名,email,权限等等,登录结束。
根据上述大致流程,理解代码就要容易一些。整个代码的入口在CentralAuthenticationServiceImpl(上述两次交互通过spring webflow实现,每一步的action都是来调用这个类),在webflow流程中,ServiceValidateController将request中的信息通过 CasArgumentExtractor提取出来l组合成SimpleWebApplicationServiceImpl类(父类是 service->principal)。对用户名密码的验证由AuthenticationManagerImpl实现,在验证通过之后,由credentialsToPrincipalResolvers将具体需要拿到的各种属性取出,封装成SimplePrincipal类(父类为principal)。验证完毕后,返回的是ImmutableAuthentication类,这个类携带了SimplePrincipal。然后由TicketGrantingTicketImpl产生TGT,包括产生时间,过期策略等等。下一步由TGT产生ST,发送回客户端。
CAS代码的结构特点,在代码的结构中,多次用到abstract类,这种类继承了一个或几个接口,实现了其中的部分方法。最终的实现类继承这种abstract类以及接口,以此实现对不同协议需求类型的映射。在使用过程中,对此种类的调用,都采用注入方式,引用的都是其接口,从而实现由配置即可确定提供何种服务的目标,非常值得借鉴。
另外,通过阅读代码,了解其结构,我也做了一些狗尾继貂的改动。本项目需要提供soap api,但需要有权限控制,如果单独写一套也是可以的,可既然已经有了CAS便想利用现有的东西。soap api和CAS client在逻辑上最大的不同是cookie,因为调用soap api的客户端可能性很多,能不能存cookie是不一定的。这样的话,CAS的认证过程就被打破了,也称不上sso了。不过好在soap api的要求也不高,只要求能登录,能控制权限即可,不需要和网页部分的登录发生联系。
需求明确之后,只要在原有代码上做减法即可。看看uml图以及代码便基本了解了方向,只要利用CAS的几样东西,一个是到数据库去取用户信息,一个是生成ticket并保持一段时间。所以,我把原有的东西简化了一下,再利用xfire便得到了具有开发soap api登录功能的CAS。
CAS的代码用文字描述实在不是一件容易的事,需要uml图帮助理解。
转:http://blog.csdn.net/eddyx/archive/2010/06/12/5666557.aspx
分享到:
相关推荐
"cas-server-3.3.3-release.zip"是CAS服务器的一个具体版本,用于部署和运行CAS服务,提供对多个应用系统的统一身份验证。 一、CAS简介 CAS是一种基于令牌的认证协议,用户只需要在第一次访问应用时进行身份验证,...
【标题】"CAS客户端3.3.3"是针对中央认证服务(Central Authentication Service, CAS)的一个特定版本的客户端组件。CAS是一种开放源码的单点登录(Single Sign-On, SSO)系统,广泛用于实现统一的身份验证和授权...
cas-server-3.4.2.1和cas-client-3.3.3 有需要的拿去, 来自 http://developer.jasig.org/cas/ 但是下载速度及慢, 我下了里面的最新版本, 有需要的拿去
`cas-client-core-3.3.3` 是一个CAS客户端的核心库,它使得应用程序能够与CAS服务器进行交互,实现用户的认证和授权功能。 1. **CAS协议原理**: CAS协议通过代理票据(Proxy Ticket)和服务票据(Service Ticket...
1. 解压`cas-server-4.2.1-release.zip`,部署`cas-server-webapp`到应用服务器(如Tomcat)。 2. 配置CAS服务器,如设置身份验证源(如LDAP或数据库),修改服务器端的配置文件。 3. 解压`cas-client-3.3.3-release...
cas-client-core-3.3.3.jar放到客户端lib文件夹下就ok
cas-server-support-jdbc-3.3.3.jar
cas-server-support-ldap-3.3.3.jar
CAS客户端JAR包版本3.3.3下载之后拷贝到lib文件夹下 配置web.xml <!--退出--> <param-name>casServerLogoutUrl <param-value>http://192.168.156.120:8080/cas/logout</param-value><!--server cas ...
单点登录 sso cas带超详细文档,包含(cas-server-webapp-4.0.0.war、c3p0-0.9.1.2.jar、cas-client-core-3.3.3.jar、cas-server-support-jdbc-4.0.0.jar、cas-server-webapp-support-4.0.0.jar、commons-logging-...
这个压缩包包含的是CAS服务器端API的3.5.3版本和CAS客户端核心组件3.3.3版本的CHM(Compiled Help Manual)文档。 `cas-3.5.3 api.chm` 文件提供了关于CAS服务器端API的详细信息。这个API是开发者构建和扩展CAS...
- 安装CAS Server介质(cas-server-3.3.3-release.zip)。 - 安装CAS Client介质(cas-client-java-2.1.1.zip)。 - 配置CAS Server,包括设置认证策略、数据库连接等。 - 配置CAS Client,通常通过Filter方式...
cas-client-integration-atlassian-3.3.3.jar 包 看好版本是不是自己需要的在下载
cas-server-webapp-3.3.3.war改名为cas.war部署到web服务器,作为单点登录的服务器。
- Server端需要的jar库包括cas-server-support-jdbc-3.3.3.jar、mysql-connector-java-5.1.7-bin.jar、org.springframework.jdbc-3.0.0.M3.jar等。 - **实现CAS系统** - 在Tomcat中部署CASServer和CASClient。 -...
标签中的"core-3.3.3.j"、"core-3.3.3-j"和"core-3.3.3-s"可能是对核心库不同部分的简写,分别对应核心库的主JAR、API文档JAR和源代码JAR。 在压缩包的文件列表中提到的"lib"目录,通常存放的是项目依赖的库文件。...
RichFaces_3.3.3_TLD.chm
ZXing Core支持多种条码和二维码格式,包括但不限于:QR Code、Data Matrix、Aztec、UPC-A、EAN-13、Code 128、Code 39等。通过指定不同的`DecodeHintType`,可以选择性地开启或关闭某些格式的解码。 5. **Java...
R-3.3.3.pkg R语言MacOS安装包 R语言是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。 R is a free software environment ...