`

CAS server3.3.3 source code 粗解(转)

    博客分类:
  • CAS
阅读更多
项目需要,对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-server-3.3.3-release.zip"是CAS服务器的一个具体版本,用于部署和运行CAS服务,提供对多个应用系统的统一身份验证。 一、CAS简介 CAS是一种基于令牌的认证协议,用户只需要在第一次访问应用时进行身份验证,...

    cas-client-3.3.3

    【标题】"CAS客户端3.3.3"是针对中央认证服务(Central Authentication Service, CAS)的一个特定版本的客户端组件。CAS是一种开放源码的单点登录(Single Sign-On, SSO)系统,广泛用于实现统一的身份验证和授权...

    cas-server-3.4.2.1和cas-client-3.3.3 有需要的拿去

    cas-server-3.4.2.1和cas-client-3.3.3 有需要的拿去, 来自 http://developer.jasig.org/cas/ 但是下载速度及慢, 我下了里面的最新版本, 有需要的拿去

    cas-client-core-3.3.3

    `cas-client-core-3.3.3` 是一个CAS客户端的核心库,它使得应用程序能够与CAS服务器进行交互,实现用户的认证和授权功能。 1. **CAS协议原理**: CAS协议通过代理票据(Proxy Ticket)和服务票据(Service Ticket...

    cas-client-3.3.3-release和cas-server-4.2.1-release下载

    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

    cas-client-core-3.3.3.jar放到客户端lib文件夹下就ok

    cas-server-support-jdbc-3.3.3.jar

    cas-server-support-jdbc-3.3.3.jar

    cas-server-support-ldap-3.3.3.jar

    cas-server-support-ldap-3.3.3.jar

    CAS客户端JAR包版本3.3.3

    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 ...

    cas-server-webapp-4.0.0单点登录(带超详细文档、数据连接jar包、c3p0)可运行

    单点登录 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-3.5.3 api 和cas-client-core-3.3.3 api chm

    这个压缩包包含的是CAS服务器端API的3.5.3版本和CAS客户端核心组件3.3.3版本的CHM(Compiled Help Manual)文档。 `cas-3.5.3 api.chm` 文件提供了关于CAS服务器端API的详细信息。这个API是开发者构建和扩展CAS...

    基于Tomcat6的CAS SSO配置

    - 安装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

    cas-client-integration-atlassian-3.3.3.jar 包 看好版本是不是自己需要的在下载

    cas-server-webapp-3.4.5.war

    cas-server-webapp-3.3.3.war改名为cas.war部署到web服务器,作为单点登录的服务器。

    CAS 框架 SSO的实现.pdf

    - 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。 -...

    zxing core-3.3.3.jar core-3.3.3-javadoc.jar core-3.3.3-sources.jar

    标签中的"core-3.3.3.j"、"core-3.3.3-j"和"core-3.3.3-s"可能是对核心库不同部分的简写,分别对应核心库的主JAR、API文档JAR和源代码JAR。 在压缩包的文件列表中提到的"lib"目录,通常存放的是项目依赖的库文件。...

    RichFaces_3.3.3标签库手册

    RichFaces_3.3.3_TLD.chm

    core3.3.3.rar

    ZXing Core支持多种条码和二维码格式,包括但不限于:QR Code、Data Matrix、Aztec、UPC-A、EAN-13、Code 128、Code 39等。通过指定不同的`DecodeHintType`,可以选择性地开启或关闭某些格式的解码。 5. **Java...

    R-3.3.3.pkg

    R-3.3.3.pkg R语言MacOS安装包 R语言是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。 R is a free software environment ...

Global site tag (gtag.js) - Google Analytics