`
雨辰RainTime
  • 浏览: 113645 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CAS3.4 代理模式详细配置

    博客分类:
  • cas
阅读更多

版本

CAS服务器版本:3.4.2

CAS客户端for JAVA版本:3.1.10

 

前言

CAS3.4版本的资料在网上实在是少的可怜啊,幸亏官方网站所提供的资料帮助我完成了代理模式的配置,不过读E文真的很费劲。

 

在详细配置之前先说下对代理模式的认证,在网上查资料时看到有人说代理模式是服务于C/S架构的程序,还举例说什么看电影什么的,当然每个人都有不同的看法,不过我真的不很赞同以上的说法。

接下来我说下我对代理模式的简单认识,如有不妥可以拍砖。

 

代理:顾名思义,是代替别人去做一些事,那么在CAS的环境中,代理所要做的事情是代替一个APP去申请ticket(proxy ticket),先说B/S架构的用处:

在B/S架构的应用场景中,了解CAS运行原理的应该都知道,其实不用代理也是不影响应用程序整个环境的运行,只要每个应用程序实现了CAS Client,都会自动去CAS服务端申请票据,那么使用代理模式后会对APP带来什么样的改变呢?其实很简单,通过查看CAS客户端的源码就能知其所以然。  APP实现CAS客户端需要增加至少两个Filter,那么第一个就是认证Filter,在其Filter中有一个检查session中有没有Assertion对象,如果有则结束,则否会重定向到CAS服务器进行认证,认证后返回给APP进行票据的兑换,整个过程是没有问题的,但接着看该Filter,如果在请求参数中有ticket的时候也会同样结束该Filter,意思就是说在访问APP时如果参数中有ticket,那么则直接到达票据验证Filter,在验证票据的Filter中是通过底层进行的,那么仔细想下就会发现这个流程可以省去了两个重定向的过程,那么在性能方面要有多大的提升。最典型的案例就是用户个人portal,用户经过CAS认证进入portal后,通过portal访问其它业务,那么在访问之前,portal代替被访问的业务申请到了票据(PT),然后以ticket为参数传给被访问业务,那么被访问业务直接进行票据验证Filter,多么完美的一个流程。

然后说下代理模式给C/S架构的程序带来的好处:

首说CAS是不支持C/S架构程序的,因为CAS是基于票据进行认证,而票据(TGC)是存储在COOKIE中,所以C/S程序首先是不能实现CAS的认证接口,但却可以实现CAS的票据验证接口,那么如果要整合C/S程序的话,大致会有这么一个场景,用户首先通过浏览器登录到Portal并经过CAS的验证,通过Portal去访问资源已达到SSO的效果,被整合的C/S程序实现了CAS的票据验证接口,那么在访问时一般要提供账号/密码,而PT就代替了C/S程序的密码,做为一次性口令使用,以此来满足用户需求实现C/S程序的单点登录,这个也是很漂亮的一个流程

 

详细配置

最后说,CAS的代理模式并不是只服务于C/S程序的,给B/S程序带来的好处也是很刺激的。  整个CAS代理模式的配置并没有传说中的那么复杂:

环境:总共有三个工程(CAS服务系统、代理系统(cas-client-proxy)、普通业务系统(cas-client)

cas-client-proxy和cas-client都要实现CAS客户端,cas-client-proxy的web.xml配置为

增加认证Filter:
<filter>
	  <filter-name>CAS Authentication Filter</filter-name>
	  <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
	  <init-param>
	    <param-name>casServerLoginUrl</param-name>
	    <param-value>http://localhost:8080/cas/login</param-value>
	  </init-param>
	  <init-param>
	  	<param-name>serverName</param-name>
	  	<param-value>http://localhost:8080</param-value>
	  </init-param>
	</filter>

 

增加验证票据Filter:

<filter>
   <filter-name>CAS Validation Filter</filter-name>
   <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
   <init-param>
     <param-name>casServerUrlPrefix</param-name>
     <param-value>http://localhost:8080/cas</param-value>
   </init-param>
   <init-param>
    <param-name>serverName</param-name>
    <param-value>http://localhost:8080</param-value>
   </init-param>
   <init-param>
        <param-name>proxyReceptorUrl</param-name>
        <param-value>/proxyCallback</param-value>
   </init-param>
   <init-param>
      <param-name>proxyCallbackUrl</param-name>
      <param-value>http://localhost:8080/cas-client-proxy/proxyCallback</param-value>
   </init-param>
 </filter>

 

增加两个扩展Filter:
<filter>
		<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
		<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
	</filter>
		
	<filter>
	  <filter-name>CAS Assertion Thread Local Filter</filter-name>
	  <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
	</filter>

 在验证票据Filter中标红的两个参数是决定此APP是否被代理模式的关键

proxyCallbackUrl参数表示接收PGT票据的地址,此地址为绝对路径

proxyReceptorUrl:经过跟踪代码,如果该参数非空,则取出该参数值所表示的绝对URL,也就是proxyCallbackUrl值。

 

配置完以上信息后,在filter-mapping中要记得为“proxyCallbackUrl”加一个url映射,如:

<filter-mapping>

<filter-name>CAS Validation Filter</filter-name>

<url-pattern>/proxyCallback</url-pattern>

</filter-mapping>

表示当访问后缀为proxyCallback的url时进入票据验证Filter

需要注意的是,如果你的应用集成了单点注销功能,则单点注销filter-mapping应该放在最前面,其次才是这个。

整个配置就完事了

 

获取PT

 

关键代码:

Assertion assertion = (Assertion) session.getAttribute(CONST_CAS_ASSERTION));
String pt = assertion.getPrincipal().getProxyTicketFor(service);

 参数service为被代理的业务系统地址,需要注意一点,service参数最后要有一个“/”,因为在跟踪CAS客户端代理后发现,当业务系统去验证票据时,所传的service参数后面都有一个反斜杠。

 

普通业务系统的配置基本类似,只不过在验证票据Filter中不太一样,如果普通业务系统不需要再次做为代理模式运行的话,则可以去掉proxyCallbackUrl和proxyReceptorUrl参数,然后加入

<init-param>
	  	<param-name>acceptAnyProxy</param-name>
	  	<param-value>true</param-value>
	  </init-param> 

 

表示为通过代理票据进行验证。

 

OK,整个配置就完成了,现在可以做个实验,假如普通业务地址为“http://localhost:8080/cas-client/”,先进行portal系统,然后通过assertion对象申请到PT票据,然后打开新的浏览器,输入cas-client的地址,后面追加参数“ticket=PT-xxxxx-cas”,正常情况下是可以直接进入系统的,并且会感觉到浏览器并没有重定向的动作。

 

注:为了测试方面,我使用http协议,那么要使用http的话,需要修改CAS服务系统的两个地方

1:修改ticketGrantingTicketCookieGenerator.xml文件,将cookieSecure改为false

2:修改deployerConfigContext.xml文件,在authenticationHandlers属性中,

<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
     p:httpClient-ref="httpClient"
     p:requireSecure="false" />

 增加标红的属性。

分享到:
评论
7 楼 kevinpan45 2013-03-22  
String proxyTicket = assertion.getPrincipal().getProxyTicketFor(				service);

assertion.getPrincipal()可以获取到用户信息,但是proxyTicket总是为null,请问这是什么原因呢
6 楼 snowspice 2011-12-27  
按照你的这个方式配置,所有的都放在一个tomcat下。
然后我在登录client_proxy成功后,想要获取assertion对象。。结果assertion对象为null.
能否将你配置的两个client web.xml全贴出来呀。。
5 楼 snowspice 2011-12-26  
能否给个详细的配置。。一步步的。。我按照这个配置。。获取不到assertion对象。。还有你的portal 是不是就是你的代理客户端的index.jsp呀?
我现在想要查找如何获得pgt 与 pt ..可是获取不到呀。。能否给个详细的例子呢?谢谢。
4 楼 雨辰RainTime 2011-06-21  
lhy5201314 写道
你好 请问下 我是不是要实现一个proxyCallback对应的Servlet呢? 谢谢

不需要自己实现,
<filter-mapping>
  <filter-name>CAS Validation Filter</filter-name>
  <url-pattern>/proxyCallback</url-pattern>
</filter-mapping>
把这个mapping放在认证Filter-Mapping之前就可以了
3 楼 lhy5201314 2011-04-28  
你好 请问下 我是不是要实现一个proxyCallback对应的Servlet呢? 谢谢
2 楼 雨辰RainTime 2011-03-08  
aubdiy 写道
雨辰RainTime  你好 

根据你给出的配置方法配置后 等到了一个有关proxyCallbackUrl 的error

是不是要自己实现以下这个:http://localhost:8080/cas-client-proxy/proxyCallback




期待回复



真不好意思,在文章中忘记说加入proxyCallback的mapping映射了,所以当CAS服务器收到地址后会使用httpclient进行访问,如果访问失败则意味着代理票据的生成失败。
为proxyCallback加一个filter-mapping就OK了。
1 楼 aubdiy 2011-02-16  
雨辰RainTime  你好 

根据你给出的配置方法配置后 等到了一个有关proxyCallbackUrl 的error

是不是要自己实现以下这个:http://localhost:8080/cas-client-proxy/proxyCallback




期待回复

相关推荐

    cas3.4集成restle所需jar文件

    版本3.4是Cas的一个稳定版本,提供了多种功能和扩展点,以适应不同环境的需求。而Restlet是一个Java RESTful API框架,它允许开发者构建基于REST原则的应用程序,提供了轻量级、高性能和灵活的API。 集成Cas 3.4与...

    CAS代理模式

    1. **CAS服务器配置**:确保CAS服务器支持并启用了代理模式,配置相应的代理策略和权限。 2. **服务端集成**:在需要代理操作的服务端代码中,集成CAS客户端库,实现票证的验证和代理票证的获取。 3. **安全策略**...

    cas代理模式代码示例

    1、**实现代理模式的相关配置**: 在Java中,我们可以使用静态代理或者动态代理(如Java的`java.lang.reflect.Proxy`类)来实现。静态代理是在编译时就已经确定了代理关系,而动态代理则可以在运行时动态创建代理...

    cas-server-3.4.2.1-release

    3. **配置 CAS**:修改 `cas.properties` 文件以设置服务器地址、数据库连接等参数。 4. **注册服务**:在 `servicesRegistry.config` 或其他服务注册库中添加需要保护的应用。 5. **启动 CAS**:通过命令行或者集成...

    cas3.4.7 与access数据库配置实例

    如果使用JDBC-ODBC桥接器,配置会有所不同,你需要设置一个有效的ODBC数据源名称(DSN): ``` cas.server.jdbc.url=jdbc:odbc:yourdatasourcename cas.server.jdbc.driver=sun.jdbc.odbc.JdbcOdbcDriver cas....

    cas-server-3.4.3.1-release.zip

    2. **配置Liferay**: 在Liferay中配置CAS客户端插件,设置SSO属性,确保与CAS服务器通信。 3. **测试集成**: 验证用户能否通过CAS服务器进行身份验证,并无缝访问Liferay中的内容和应用。 4. **定制和扩展**: 如果...

    cas-3.4.1_单点登录_CAS_

    - **配置文件**:如`cas.properties`,用于配置CAS服务器的行为,如数据库连接、认证设置等。 - **文档**:可能包含用户手册、开发者指南等,帮助你理解如何部署和使用CAS。 - **测试用例**:这些用例可以帮助你验证...

    CAS client 3.4.2

    这个版本的客户端提供了与CAS服务器交互的功能,允许用户通过一个统一的登录界面访问多个应用系统,而无需为每个系统单独设置认证。在本文中,我们将详细探讨CAS客户端3.4.2的相关知识点。 **一、CAS客户端架构** ...

    CAS-server -3.4myeclipse工程直接运行源代码

    在本项目" CAS-server -3.4 myeclipse工程直接运行源代码 "中,提供了可以直接在MyEclipse集成开发环境中运行的CAS服务器源码,这对于理解和学习CAS的工作原理,以及进行二次开发是非常有帮助的。 首先,了解SSO...

    cas-proxy认证

    1. **CAS 服务器配置**:需要在 CAS 服务器端启用代理认证的相关设置。 2. **客户端配置**:客户端应用需要正确配置以支持代理认证。 3. **HTTPS 配置**:确保所有涉及 CAS-Proxy 认证的通信均通过 HTTPS 进行。 4. ...

    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/ 但是下载速度及慢, 我下了里面的最新版本, 有需要的拿去

    H3C CAS云计算最佳实践和配置指导手册汇总集.rar

    02 H3C CAS-云容器引擎配置指导 03 H3C CAS 虚拟机快照配置指导 04 H3C CAS-虚拟机防病毒配置指导 05 H3C CAS SR-IOV配置指导 06 H3C CAS vGPU热迁移配置指导 07 H3C CAS 内存管理最佳实践 08 H3C CAS 磁盘...

    cas-server-webapp-3.4.12.1.war

    Yelu大学研发的CAS(Central Authentication Server) , 单点登录服务器 , 将war包放置到tomcat/webapp中即可运行

    cas-server-support-spnego-3.4.2.jar

    cas3.4用到的jar

    CAS单点登录(SSO)服务端自定义认证+CAS客户端配置+CAS完整使用文档+CAS4.2.7 cas-serv服务端源码 cas-client客户端源码

    压缩包中包含的文档将指导你如何配置CAS客户端,包括在Spring或Web.xml中添加必要的配置项,设置服务URL,以及处理TGT(Ticket Granting Ticket)和ST(Service Ticket)。 3. **CAS4.2.7源码**: CAS 4.2.7是CAS...

    cas-demo.rar_.net cas demo_CAS_CAS点登录配置文档_DEMO_cas .net

    在.NET客户端配置中,可能需要处理这种代理模式。 6. **定制化**:根据应用需求,可能需要自定义CAS客户端的行为,如自定义登录页面、错误处理或者用户信息的解析。 7. **安全考虑**:集成CAS后,应确保网络通信的...

    CAS Server全部配置详解

    CAS Server全部配置详解

    CAS单点登录配置

    4. **客户端集成**:在每个需要SSO的应用中,集成CAS客户端库,如`spring-security-cas`,配置应用的`security.xml`或相应的安全配置,设置CAS服务器地址、服务验证URL以及票证校验逻辑。 5. **票证生成与验证**:...

    CAS示例环境部署及配置

    2. **配置 CAS 验证**:在客户端应用的配置文件中,设置 CAS Server 的地址、服务验证 URL 和登出 URL。 3. **测试 SSO 功能**:确保在同一个浏览器会话中,访问 app1 和 app2 不需要再次登录,且可以获取登录用户...

Global site tag (gtag.js) - Google Analytics