`
yanfeijun
  • 浏览: 26498 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
因为公司要使用cas,所以深入了解了一下.网上资料很多,各种原理就不累述了,说一下遇到的问题吧:

1.客户端版本选择
cas常用的有两个客户端,一个是老的耶鲁的,包名中有yale的;一个是cas client3版本,包名为jasig的。
yale版的登出好像没完全实现,不能够做到所有应用一齐登出,cas client3多一个single out filter来实现这个功能。
yale版的代理回调是通过配置servlet来处理的,cas client3通过在过滤器中处理。

相比较而言,yale的配置比较简单,网上的配置说明通常都是以yale版本为主,cas client3的配置可以看官网的wiki,https://wiki.jasig.org/display/CASC/CAS+Client+for+Java+3.1,不过是英文的,cas client3还可以使用spring来配置,这种配置方式我自己没实验过,可以看一下文档。

2.配置中的问题

第一个问题是证书中的域,因为我们是做政府应用的,通常没有域名,只能使用ip来进行域名认证,cas本身又不支持ip的域,只能改造cas的客户端,在调用connection的openconection之前,把默认的ssl处理handle设置为javax.net.ssl,并注入一个自定义的HostnameVerifier:
           System.setProperty("java.protocol.handler.pkgs", "javax.net.ssl");
            
            HostnameVerifier hv = new HostnameVerifier() {
                public boolean verify(String urlHostName, SSLSession session) {
                return urlHostName.equals(session.getPeerHost());
                }
           };
          
            HttpsURLConnection.setDefaultHostnameVerifier(hv);

cas client3中,以上代码加在AbstractCasProtocolUrlBasedTicketValidator的retrieveResponseFromServer方法中,我一直没找到默认的hostnameverifer实现,所以不知道为什么ip不能通过验证。

第二个是在weblogic中出现的,估计只是开发中才会出现的问题,证书太小,开发中通常都是自认证,所以会出现
FATAL Alert:BAD_CERTIFICATE - A corrupt or unuseable certificate was received.
解决方法,加入大小设置即可。

3.cas的代理认证
cas协议2.0加入了代理模式,在门户这种应用场景下相当的有用,网上的配置通常基于yale的客户端,cas client3的配置只有这篇文章有提及:http://fallenlord.blogbus.com/logs/57175888.html,但是其中有几个需要说明的proxyCallbackUrl和proxyReceptorUrl实际上是不需要我们自己开发的,yale版中回调有一个servlet的,新版本是在过滤器中处理掉的,这个地址可以自己随意定义,proxyCallbackUrl需要使用https协议,所以需要cas server端信任cas client的证书,具体配置方法就是在客户端生成证书,加入到服务器端的信任域中间去。

4.cas的登录页

在cas保护下的应用,在未登陆的时候,都会跳转到cas服务器上进行登录,理论上sso就是这个样子的,但是有时候客户会要求我在自己的页面登录,不要跳转到cas登录页,目前我没想到好的办法,我们采用了iframe嵌入cas登录页的方式来处理(ie下iframe会话有bug,google一下)。
贴一下我们的配置文件吧:
CasTest(代理模式的发起端)
<filter>
        <filter-name>CAS Single Sign Out Filter</filter-name>
        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
    </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>https://10.1.10.100:8443/cas/login</param-value>
        </init-param>
       <init-param>
        <param-name>renew</param-name>
        <param-value>false</param-value>
       </init-param>
       <init-param>
        <param-name>gateway</param-name>
        <param-value>false</param-value>
       </init-param>
       <init-param>
        <param-name>serverName</param-name>
        <param-value>http://10.1.10.100:8080</param-value>
       </init-param>

    </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>https://10.1.10.100:8443/cas/</param-value>
       </init-param>
       <init-param>
        <param-name>serverName</param-name>
        <param-value>http://10.1.10.100:8080</param-value>
       </init-param>
       <init-param>
        <param-name>useSession</param-name>
        <param-value>true</param-value>
       </init-param>
       <init-param>
        <param-name>redirectAfterValidation</param-name>
        <param-value>true</param-value>
       </init-param>
       <init-param>
         <param-name>acceptAnyProxy</param-name>
         <param-value>true</param-value>
       </init-param>
       <init-param>
        <param-name>proxyCallbackUrl</param-name>
        <param-value>https://10.1.10.100:8444/CasTest/proxy</param-value>
        </init-param>
        <init-param>
            <param-name>proxyReceptorUrl</param-name>
            <param-value>/proxy</param-value>
        </init-param>
    </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-mapping>
       <filter-name>CAS Validation Filter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
       <filter-name>CAS Single Sign Out Filter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
       <filter-name>CAS Authentication Filter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
       <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>

CasTest2(代理模式的服务提供端)
<filter>
        <filter-name>CAS Single Sign Out Filter</filter-name>
        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
    </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>https://10.1.10.100:8443/cas/login</param-value>
        </init-param>
       <init-param>
        <param-name>renew</param-name>
        <param-value>false</param-value>
       </init-param>
       <init-param>
        <param-name>gateway</param-name>
        <param-value>false</param-value>
       </init-param>
       <init-param>
        <param-name>serverName</param-name>
        <param-value>http://10.1.10.100:8080</param-value>
       </init-param>

    </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>https://10.1.10.100:8443/cas</param-value>
       </init-param>
       <init-param>
        <param-name>serverName</param-name>
        <param-value>http://10.1.10.100:8080</param-value>
       </init-param>
       <init-param>
        <param-name>useSession</param-name>
        <param-value>true</param-value>
       </init-param>
       <init-param>
        <param-name>redirectAfterValidation</param-name>
        <param-value>true</param-value>
       </init-param>
       <init-param>
        <param-name>acceptAnyProxy</param-name>
        <param-value>true</param-value>
    </init-param>
    </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-mapping>
       <filter-name>CAS Single Sign Out Filter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
       <filter-name>CAS Authentication Filter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
       <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
        <filter-mapping>
       <filter-name>CAS Validation Filter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>

分享到:
评论
3 楼 denger 2010-11-13  
lovechenxue 写道
在cas保护下的应用,在未登陆的时候,都会跳转到cas服务器上进行登录,理论上sso就是这个样子的,但是有时候客户会要求我在自己的页面登录,不要跳转到cas登录页,目前我没想到好的办法,我们采用了iframe嵌入cas登录页的方式来处理(ie下iframe会话有bug,google一下)。



这个简单  你可已自己写一个类  继续cas的filter  然后在这个类中判断哪些URL是需要跳转到SSO上验证的,哪些URL是不需要验证的(比如图片,css,js等)。


可实现方案,参考:http://denger.iteye.com/blog/809170
2 楼 yanfeijun 2010-11-01  
lovechenxue 写道
在cas保护下的应用,在未登陆的时候,都会跳转到cas服务器上进行登录,理论上sso就是这个样子的,但是有时候客户会要求我在自己的页面登录,不要跳转到cas登录页,目前我没想到好的办法,我们采用了iframe嵌入cas登录页的方式来处理(ie下iframe会话有bug,google一下)。



这个简单  你可已自己写一个类  继续cas的filter  然后在这个类中判断哪些URL是需要跳转到SSO上验证的,哪些URL是不需要验证的(比如图片,css,js等)。

不是这个问题啦,是说通常页面会有个跳转,有的用户嫌操作麻烦而已
1 楼 lovechenxue 2010-10-26  
在cas保护下的应用,在未登陆的时候,都会跳转到cas服务器上进行登录,理论上sso就是这个样子的,但是有时候客户会要求我在自己的页面登录,不要跳转到cas登录页,目前我没想到好的办法,我们采用了iframe嵌入cas登录页的方式来处理(ie下iframe会话有bug,google一下)。



这个简单  你可已自己写一个类  继续cas的filter  然后在这个类中判断哪些URL是需要跳转到SSO上验证的,哪些URL是不需要验证的(比如图片,css,js等)。

相关推荐

    H3C CAS总结.zip

    这个压缩包“H3C CAS总结.zip”包含了丰富的资料,包括经验文件夹、配置案例、开局手册等,这些都是理解和掌握H3C CAS的重要资源。 首先,我们来看“CAS维护实验”。这个文件夹可能包含了一系列的实践操作教程,...

    cas 自定义登录页面

    总结,自定义CAS登录页面涉及到前端页面设计、后端配置以及与CAS服务器的交互等多个方面。通过上述步骤,你可以实现一个既满足品牌需求又具备良好安全性的自定义登录页面。记住,每个环节都需仔细测试,确保其功能...

    idea 中导入cas

    总结起来,"idea中导入cas"是一个包含下载源码、创建Idea项目、配置编译环境、运行调试等多个环节的过程,旨在提升开发和维护CAS服务的效率。对于开发者来说,熟练掌握这个流程不仅能提高工作效率,还能更好地理解和...

    cas 普通方式和SpringBoot方式客户端 普通方式服务端

    总结来说,这个压缩包包含了一个CAS服务器的实现、两个可能的客户端实现,以及证书生成的命令,提供了一整套实现CAS SSO的环境。在实际部署时,你需要根据自己的需求配置证书、CAS服务器和客户端,确保安全、有效地...

    struts2+cas单点登陆例子

    总结一下,Struts2+CAS的单点登录集成涉及到的主要知识点包括:CAS的工作流程、Struts2框架的拦截器机制、Web应用的过滤器配置以及安全认证的实现。通过这个简单的示例,开发者可以学习如何在自己的项目中实施SSO,...

    CAS网上的资料详细总结

    网上关于CAS的技术文章鱼龙混杂,我在这里整理出比较优秀和好用的文章,结合起来可以完成CAS的搭建

    iscas.rar_iscas_基准电路_逻辑综合

    总结而言,iscas基准电路是衡量和改进逻辑综合工具性能的关键工具,逻辑优化和逻辑验证是保证设计质量和效率的重要步骤。通过对iscas基准电路中各电路模型的处理,我们可以深入理解逻辑综合过程,提高数字电路设计的...

    cas对接 net系统说明文档

    #### 六、总结 本文档详细介绍了如何在.NET系统中集成CAS以实现单点登录。通过对`.config`文件的修改以及自定义HTTP模块的实现,我们可以轻松地将CAS单点登录功能集成到.NET应用中,从而提高系统的安全性和用户体验...

    CAS Protocol 3.0 Specification.docx 官方中文版教程详解

    **总结** CAS协议3.0为开发人员提供了安全、高效的用户身份验证机制,尤其适合多应用环境。其核心是通过TGT和ST管理用户的登录状态,实现跨应用的单点登录和登出。理解并正确实施CAS协议3.0,对于构建安全的Web应用...

    django+cas环境部署

    #### 四、总结 本系统的搭建充分利用了Django强大的开发能力、Nginx优秀的反向代理性能、Elasticsearch高效的搜索服务、CAS的安全认证机制以及MySQL稳定的数据存储功能。通过精心设计和配置,实现了高度集成化的...

    CAS初步调研.docx

    总结来说,CAS的核心价值在于提供了一种统一的身份验证机制,使得多应用环境下的用户管理变得更加便捷和安全。在配置过程中,需要注意服务器的URL设置、应用的web.xml配置以及SSL证书的信任设置,这些都是确保SSO...

    构建cas的war部署包(cas-overlay)(cas-server-webapp)(4.2.7)

    总结起来,CAS-Overlay的构建过程是为了在不修改源码的情况下,实现CAS的定制化部署。这使得维护和升级CAS变得更加方便,同时保持了与社区版本的兼容性。通过对`cas-server-webapp-4.2.7`的WAR overlay,我们可以...

    CAS Service 5.2.x 数据库连接REST已经配置

    总结起来,CAS Service 5.2.x与MySQL数据库的REST配置涉及以下几个关键步骤: 1. 配置数据库连接参数(URL、用户名、密码、驱动类名)。 2. 将配置文件放入CAS服务容器。 3. (可选)通过REST API动态更新配置。 4. ...

    cas sso server page

    总结来说,CAS SSO服务器是实现单点登录的关键组件,它简化了多应用系统的身份验证流程,提升了安全性。理解并掌握CAS的工作原理和配置,能帮助我们有效地管理和维护SSO环境,为用户提供便捷且安全的访问体验。

    关于cas安装和配置

    【总结】 CAS 安装和配置的关键在于正确配置 CAS Server 和客户端应用,确保服务器能够正确处理认证请求,客户端应用能够识别并响应 CAS Server 的认证结果。通过这种方式,你可以构建一个安全、高效的单点登录系统...

    H3C CAS应用HA操作指南.pdf

    下面是本文档的知识点总结: 一、简介 H3C CAS应用HA系统是一个高可用性的解决方案,旨在提供高效、可靠的应用服务。该系统通过HA技术实现应用的高可用性,确保应用程序的连续性和可靠性。 二、产品规格 H3C CAS...

    CAS实现不同应用展示不同的登录页

    总结,实现CAS系统下不同应用展示不同登录页的关键在于理解CAS的工作机制,并对服务器端进行适当的配置和扩展。通过修改登录视图、动态选择页面和定义应用标识,我们可以为用户提供更加个性化和友好的登录体验。在...

    cas、第三方接口登录

    总结来说,CAS单点登录是一种有效的用户认证解决方案,而QQ和微博的第三方登录接口则为企业和网站提供了便捷的社会化登录方式。正确集成这些接口,能够提升用户满意度,同时简化登录流程,降低用户流失率。开发者...

    CAS系统使用证书和命令

    总结来说,CAS系统中的证书管理涉及证书的生成、导入、导出以及日常维护,这些操作都需要按照安全规范进行,以确保CAS提供的身份验证服务安全可靠。了解并熟练掌握这些命令,对于维护CAS系统的安全性至关重要。

Global site tag (gtag.js) - Google Analytics