`

Yale CAS实践

阅读更多

Yale CAS最佳实践 第一部分:配置篇
1.环境准备
Jdk1.4.2

Tomcat5.0.28
cas-server-2.0.12(没有采用更高版本,是因为它最简单明了)
cas-client-java-2.1.1
2.在jdk上配置SSL
到http://java.sun.com/products/jsse/去下载jsse,我用的是1.0.3;下载下来后是一个zip包,把里 边lib目录下的jar包复制到你的jdk目录下的jre\lib\ext目录中,是三个文件:jsse.jar;jnet.jar;jcert.jar

3.SSL验证证书
3.1.生成
keytool -genkey -alias tomcat -keyalg RSA
? 如果C:\Documents and Settings\Administrator\.keystore已经存在,请先删除。
? 输入tomcat本身的缺省口令changeit
? 用户前名和用户后名都用localhost
keytool -export -alias tomcat -file server.crt
只能输入tomcat的缺省口令changeit
keytool -import -trustcacerts -alias tomcat -file server.crt -keystore %java_home%/jre/lib/security/cacerts
3.2.显示
keytool -list -v -keystore %java_home%/jre/lib/security/cacerts > t.txt
3.3.删除
keytool -delete -alias tomcat -keystore  %java_home%/jre/lib/security/cacerts -keypass changeit
只能输入tomcat的缺省口令changeit
3.4.keytool参考
%JAVA_HOME%\bin\keytool -delete -alias tomcat -keypass changeit
%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keypass changeit -keyalg RSA
%JAVA_HOME%\bin\keytool -export -alias tomcat -keypass changeit  -file %FILE_NAME%
%JAVA_HOME%\bin\keytool -import -file server.crt -keypass changeit
-keystore %JAVA_HOME%/jre/lib/security/cacerts
%JAVA_HOME%\bin\keytool -import -file server.crt -keypass changeit
%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keypass changeit -keyalg RSA -validity 365

4.Tomcat配置
4.1.拷贝
拷贝C:\Documents and Settings\Administrator\.keystore到%tomcat_home%\conf\
4.2.配置
编辑%tomcat_home%\conf\server.xml,去掉ssl的注释,并更改为如下配置
    <Connector port="8443" keystorePass="changeit" keystoreFile="conf/.keystore"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" debug="0" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
4.3.注意
请保持C:\Documents and Settings\Administrator\.keystore与%tomcat_home%\conf\.keystore一致

5.Tomcat jmx bug
在sun网站上http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/download.jsp
下载jmx-1_2_1-ri.zip,解压后,把jmxri.jar重命名为jmx.jar,覆盖tomcat/bin目录下的jmx.jar
这个适用于cas-server-3.*


Yale CAS最佳实践 第二部分:原理篇

6.概念术语
CAS(Central Authentication Service)
TGT(Ticket Granting Ticket)
ST(Service Ticket)
PGT(Proxy Granting Ticket)
7.原理剖析
Yale CAS使用了Ticket Granting Cookie (简称TGC)去作为获取Service Ticket(简称ST)的凭据,这个TGC 是保存在客户端的cookie,即当第2次被其他CAS Client重定向的时候,CAS Server实际上已经从用户的Cookie中抓取到TGC,然后知道TGC对应的用户,因此避免了再次登录,如果CAS Server抓取不到TGC,则用户需要登陆。

众所周知,cookie是不能跨域的。但是CAS能够做abc.com和xyz.com的sso,因为CAS Server缓存了所有的ticket,所以Client无需共享cookies。

Yale CAS最佳实践 第三部分:源代码研读

8.源代码研读
8.1.web.xml参数定义:
edu.yale.its.tp.cas.client.filter.loginUrl: CAS server的login URL. (Required)
edu.yale.its.tp.cas.client.filter.validateUrl: CAS server的URL验证器. (Required)
edu.yale.its.tp.cas.client.filter.serviceUrl: URL of this service. (Required if serverName is not specified)
edu.yale.its.tp.cas.client.filter.serverName: 主机名:端口号
edu.yale.its.tp.cas.client.filter.authorizedProxy: 身份验证代理,用空格隔开.必须有一个. (缺省,只接受ST,不接受PT)
edu.yale.its.tp.cas.client.filter.proxyCallbackUrl: 本地代理回调监听器,用来接受PGT/PGTIOU. (可选)
edu.yale.its.tp.cas.client.filter.renew: 是否重新登录参数(缺省为false)
edu.yale.its.tp.cas.client.filter.gateway: 是否使用网关......虽然英文不难明白,但的确不懂到底有什么用,因而不敢断章取义,望哪位高手能补充一下,在此谢过
edu.yale.its.tp.cas.client.filter.wrapRequest: 封装了HttpServletRequest,重载了getRemoteUser()方法. 如果设置为"true", request.getRemoteUser()将返回登录用户名.(可选的,缺省为false.)
8.2.总体结构图

8.3.client源代码研读

8.4.server源代码研读

Yale CAS最佳实践 第四部分:试试身手

1.测试类
我写了一个RequestInfoServlet,可以显示HttpRequest的绝大部分有用信息,经过sso后,可以查看 HttpRequest里面还有什么东西。呵呵,我喜欢这样干。

Java代码  收藏代码
  1. import  java.io.IOException;  
  2. import  java.io.PrintWriter;  
  3. import  java.util.Enumeration;  
  4.   
  5. import  javax.servlet.ServletException;  
  6. import  javax.servlet.http.Cookie;  
  7. import  javax.servlet.http.HttpServlet;  
  8. import  javax.servlet.http.HttpServletRequest;  
  9. import  javax.servlet.http.HttpServletResponse;  
  10. import  javax.servlet.http.HttpSession;  
  11.   
  12. /**  
  13.  * @author Liujj Date 2006-12-19 <br>  
  14.  *         Description: <br>  
  15.  *         RequestHeadersServlet  
  16.  */   
  17. public   class  RequestInfoServlet  extends  HttpServlet {  
  18.     public   void  doGet(HttpServletRequest request, HttpServletResponse response)  
  19.             throws  IOException, ServletException {  
  20.         response.setContentType("text/html" );  
  21.         PrintWriter out = response.getWriter();  
  22.         //header   
  23.         Enumeration headerNames = request.getHeaderNames();  
  24.         out.println("<B>*********[1].begin print headerNames************</B><p>" );  
  25.         while  (headerNames.hasMoreElements()) {  
  26.             String name = (String) headerNames.nextElement();  
  27.             String value = request.getHeader(name);  
  28.             out.println(name + " = "  + value +  "<p>" );  
  29.         }  
  30.         out.println("<B>*********[1].end print headerNames************</B><p><p>" );  
  31.           
  32.         //attributeNames   
  33.         out.println("<B>*********[2].begin print attributeNames************</B><p>" );  
  34.         Enumeration attributeNames = request.getAttributeNames();  
  35.         while  (attributeNames.hasMoreElements()) {  
  36.             String name = (String) attributeNames.nextElement();  
  37.             String value = (String)request.getAttribute(name);  
  38.             out.println(name + " = "  + value +  "<p>" );  
  39.         }  
  40.         out.println("<B>*********[2].end print attributeNames************</B><p><p>" );  
  41.           
  42.         //parameterNames   
  43.         out.println("<B>*********[3].begin print parameterNames************</B><p>" );  
  44.         Enumeration parameterNames = request.getParameterNames();  
  45.         while  (parameterNames.hasMoreElements()) {  
  46.             String name = (String) parameterNames.nextElement();  
  47.             String value = request.getParameter(name);  
  48.             out.println(name + " = "  + value +  "<p>" );  
  49.         }  
  50.         out.println("<B>*********[3].end print parameterNames************</B><p><p>" );  
  51.           
  52.         //session   
  53.         out.println("<B>*********[4].begin print session AttributeNames************</B><p>" );  
  54.         HttpSession session = request.getSession();  
  55.         Enumeration sAttributeNames = session.getAttributeNames();  
  56.         while  (sAttributeNames.hasMoreElements()) {  
  57.             String name = (String) sAttributeNames.nextElement();  
  58.             Object value = session.getAttribute(name);  
  59.             out.println(name + " = "  + value +  "<p>" );  
  60.         }  
  61.         out.println("<B>*********[4].end print session attributeNames************</B><p><p>" );  
  62.           
  63.         //cookie   
  64.         out.println("<B>*********[4].begin print Cookie************</B><p><p>" );  
  65.         Cookie[] cookie = request.getCookies();  
  66.         for ( int  i= 0 ; i< cookie.length; i++) {  
  67.             String name = cookie[i].getName();  
  68.             String value = cookie[i].getValue();  
  69.             out.println(name + " = "  + value +  "<p>" );  
  70.         }     
  71.         out.println("<B>*********[4].end print Cookie************</B><p><p>" );  
  72.           
  73.     }  
  74.   

分享到:
评论

相关推荐

    Yale CAS最佳实践.rar

    本篇将详细探讨Yale CAS的最佳实践,包括环境准备、Java环境的SSL配置、证书验证、Tomcat服务器的配置以及针对Tomcat JMX Bug的解决方案。** ### 一、环境准备 在开始配置Yale CAS之前,确保你有以下基础环境: 1. ...

    Yale CAS Server的部署及cas-java-client 3.2的应用

    **Yale CAS Server的部署及cas-java-client 3.2的应用** CAS(Central Authentication Service)是一种广泛使用的基于Web的身份验证协议。它允许用户通过单一登录(Single Sign-On, SSO)访问多个应用系统,简化了...

    yale-cas服务器端深度定制

    【描述】虽然描述中提到的是NULL,但我们可以推测这篇博文可能详细介绍了博主在定制Yale CAS服务器端的过程中遇到的问题、解决方法以及一些最佳实践。博主sgq0085在iteye博客上分享了他们的经验,这通常包括如何配置...

    CAS 开发综合笔记

    "Yale CAS最佳实践 --全部 - SOA - Java - JavaEye论坛.mht"提供了Yale大学关于CAS部署和管理的最佳实践,涵盖了安全、性能优化和故障排查等方面,对实际操作具有指导意义。 7. **取消HTTPS认证**: 在某些场景下...

    phpCAS源码以及调用示例(redis管理session,解决无法logout的问题)

    CAS(Central Authentication Service)是 Yale 大学开发的一个开源SSO框架,而phpCAS是PHP语言中用于与CAS服务器交互的客户端库。本文将深入探讨phpCAS的源码和调用示例,特别是在使用Redis管理session以及解决无法...

    cas3.5.2单点登录文档详细配置

    【CAS实践配置】 在实际配置中,例如使用Tomcat 6.0,需要分别部署CAS Server和CAS Client。这通常涉及到以下步骤: 1. 下载并解压cas-server-3.5.2和cas-client-3.2.1。 2. 配置CAS Server,包括修改配置文件、...

    cas单点登录

    CAS(Central Authentication Service)是 Yale 大学开源的一个单点登录协议,它提供了一种集中式的认证方式,简化了多应用系统的身份验证流程。 **单点登录原理** 单点登录的核心在于一个中心认证服务器(CAS ...

    CAS代理模式

    在Yale CAS的实现中,代理模式基于代理票据(Proxy Ticket)的概念。当一个应用(称为服务)希望代表已认证的用户访问另一个应用时,它会向CAS服务器请求一个代理票据。这个代理票据就像是用户的临时“护照”,证明...

    CAS-SSO-TRIAL.zip_CAS_CAS SSO_java sso_sso

    描述中提到的"Yale CAS"是指耶鲁大学开发的CAS服务器,它是一种广泛使用的SSO解决方案。这个教程涵盖了如何使用CAS来实现SSO,包括了Java和.NET平台的实现方法。"http://214s.5d6d.com"可能是一个链接,原本提供更多...

    cas实现单点登录 功能

    CAS(Central Authentication Service)是 Yale 大学开源的一个基于 Java 的单点登录系统,它提供了一种安全、便捷的身份验证机制。本文档将深入探讨如何使用 CAS 实现 Java 应用中的单点登录功能。 一、CAS 概述 ...

    单点登录cas参考

    CAS(Central Authentication Service)是一个开源的单点登录解决方案,由Yale大学发起,旨在为Web应用提供一种可靠的单点登录方法。它已成为JA-SIG(Java Architecture for XML Web Services)的一个项目,于2004年...

    WAS与CAS配置

    具体操作时,还需注意一些细节,比如在配置CAS Java客户端时,“edu.yale.its.tp.cas.client.filter.serverName”的配置项应为servername:port,而非仅仅localhost,以确保正确地指向CAS服务器的地址。此外,CAS...

    Yale人脸库

    **Yale人脸库详解** Yale人脸库,全称为耶鲁大学(Yale University)的...随着技术的进步,基于Yale人脸库的研究成果将继续为实际应用场景,如安全监控、社交媒体身份验证、生物识别技术等领域提供理论支持和实践指导。

    网上简单的SSO CAS 单点登录源码

    CAS(Central Authentication Service)是 Yale 大学开源的一个SSO协议,广泛应用于企业级应用环境中。本源码集合为一个简单的Java实现的SSO CAS单点登录示例,适合初学者理解和实践SSO原理。 首先,我们需要理解...

    cas单点登录汇总整理.rar

    CAS(Central Authentication Service)是 Yale 大学开发的一个开源项目,是实现单点登录的一种流行方案。本文档将深入探讨 CAS 单点登录的实现过程、核心技术和配置方法。 一、CAS 概述 CAS 是一个基于 Web 的...

    cas-4.0.0.tar.gz

    1. **CAS介绍**:CAS是Yale University发起的一个项目,现在由Apereo基金会维护。它的主要功能是让用户只需要一次登录,就能访问多个相互信任的应用系统,提高了用户体验并强化了安全性。CAS支持多种协议,如CAS ...

    CAS单点登录(SSO)完整教程

    CAS(Central Authentication Service)是 Yale 大学发起的一个开源项目,它提供了一种在Web 应用中统一处理用户认证的解决方案,被称为单点登录(Single Sign-On,简称SSO)。SSO允许用户在一个系统中登录后,无须...

    CAS单点登录 for Tomcat

    CAS(Central Authentication Service...总的来说,这些文档提供了全面的指导,帮助开发者在Linux上的Tomcat环境中实现CAS单点登录,涵盖了从基础理论到具体实践的各个层面,对于理解SSO机制和实际操作具有很大的价值。

    定制cas单点登录用户名密码验证

    这些文件名暗示了学习资源的内容,包括Yale大学的CAS教程、关于CAS的Java开发者论坛讨论、一篇关于CAS最佳实践的文章以及一篇关于在Tomcat上开发CAS单点登录并定制认证方式的博客文章。这些资料将提供详细的步骤、...

Global site tag (gtag.js) - Google Analytics