`
netfly
  • 浏览: 114440 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Yale CAS最佳实践 --全部

    博客分类:
  • soa
阅读更多
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里面还有什么东西。呵呵,我喜欢这样干。

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * @author Liujj Date 2006-12-19 <br>
 *         Description: <br>
 *         RequestHeadersServlet
 */
public class RequestInfoServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		//header
		Enumeration headerNames = request.getHeaderNames();
		out.println("<B>*********[1].begin print headerNames************</B><p>");
		while (headerNames.hasMoreElements()) {
			String name = (String) headerNames.nextElement();
			String value = request.getHeader(name);
			out.println(name + " = " + value + "<p>");
		}
		out.println("<B>*********[1].end print headerNames************</B><p><p>");
		
		//attributeNames
		out.println("<B>*********[2].begin print attributeNames************</B><p>");
		Enumeration attributeNames = request.getAttributeNames();
		while (attributeNames.hasMoreElements()) {
			String name = (String) attributeNames.nextElement();
			String value = (String)request.getAttribute(name);
			out.println(name + " = " + value + "<p>");
		}
		out.println("<B>*********[2].end print attributeNames************</B><p><p>");
		
		//parameterNames
		out.println("<B>*********[3].begin print parameterNames************</B><p>");
		Enumeration parameterNames = request.getParameterNames();
		while (parameterNames.hasMoreElements()) {
			String name = (String) parameterNames.nextElement();
			String value = request.getParameter(name);
			out.println(name + " = " + value + "<p>");
		}
		out.println("<B>*********[3].end print parameterNames************</B><p><p>");
		
		//session
		out.println("<B>*********[4].begin print session AttributeNames************</B><p>");
		HttpSession session = request.getSession();
		Enumeration sAttributeNames = session.getAttributeNames();
		while (sAttributeNames.hasMoreElements()) {
			String name = (String) sAttributeNames.nextElement();
			Object value = session.getAttribute(name);
			out.println(name + " = " + value + "<p>");
		}
		out.println("<B>*********[4].end print session attributeNames************</B><p><p>");
		
		//cookie
		out.println("<B>*********[4].begin print Cookie************</B><p><p>");
		Cookie[] cookie = request.getCookies();
		for(int i=0; i< cookie.length; i++) {
			String name = cookie[i].getName();
			String value = cookie[i].getValue();
			out.println(name + " = " + value + "<p>");
		}   
		out.println("<B>*********[4].end print Cookie************</B><p><p>");
		
	}

}

2.cas log不起作用
目前那个log4j不起作用,天天用着的,算是个小bug,哪个兄弟下载后能帮忙解决一下,再次谢过^_^

  • 大小: 22.7 KB
  • 大小: 33.5 KB
  • 大小: 27.6 KB
分享到:
评论
26 楼 netfly 2006-12-31  
引用
即使这样可行也不可能每个客户端电脑这样去整!

啊?只有那些需要集成到sso的client电脑才需要,如果sso client和server在一台电脑上,根本就不需要改动,普通用户电脑是根本不需要的。
我一样是在实际项目中使用的,绝非是玩玩!没谁有空陪你玩!
25 楼 boogie 2006-12-31  
netfly 写道
修改本地的hosts表,在C:\WINDOWS\system32\drivers\etc目录下

我越来越搞不懂了!你这样是用于生产环境还是测试环境?!
即使这样可行也不可能每个客户端电脑这样去整!

我是要应用到正式系统中去的,而非玩玩!
24 楼 netfly 2006-12-31  
修改本地的hosts表,在C:\WINDOWS\system32\drivers\etc目录下
23 楼 boogie 2006-12-31  
netfly 写道

client1必须知道server1,我是通过配置dns解决的

安装dns服务器,在user1里配置好dns地址?

我可能没说清楚,edu.yale.its.tp.cas.client.filter.serverName当然可以配IP地址,就是CAS客户端应用不能用IP去访问CAS服务!如果配了DNS那就没这事了,问题是我们内部没有DNS服务器!

如果有办法装了DNS服务器后用户客户端电脑不用配置DNS地址,也可以。我用自动获取DNS服务器地址不行!我们没有用动态IP!

请问你们怎么配置?
22 楼 netfly 2006-12-31  
引用
我试过了,不行的! 在同一台电脑里可以通过IP访问,在其他电脑上的确不可以的!我想想也是不可以的!其它电脑怎么会识别https://netfly/..?!


假如用户电脑为user1 192.168.1.100
假如yale cas server 为server1 192.168.1.101
假如yale cas client为client1 192.168.1.102

用户只要知道client1就行
client1必须知道server1,我是通过配置dns解决的

这种方案我已经试验过,完全可行。

我还试验过yale cas client和yale cas server 在同一台机器上也是可以的。相信yale cas也不会连ip都不会支持,毕竟它只是使用了一个ssl,其他的东西都是网络相关问题了。
21 楼 boogie 2006-12-31  
sunnyme 写道
证书CN的问题,我都是这样处理的,可以在生成密钥时,将CN设置为需要的域名,系统实施后,域名自然由DNS处理,开发过程中测试,可以修改本地的hosts表,添加域名到本机(CAS所在机)地址的映射,使用浏览器访问,不要走代理,一般就ok了。

另外,LZ,关于gateway的理解,有没有进展呀?我也看晕了。

请问你们的系统是部署在内网还是外网?如果内网的话,有办法让客户端电脑不配置DNS服务器地址就可通过域名访问系统?
20 楼 boogie 2006-12-31  
boogie 写道
netfly 写道
to boogie:
假如我的电脑ip为192.168.6.110,我的电脑名为netfly
那么,在生成证书的时候,就不能输入localhost,只能输入netfly,在其他电脑上,一样可以通过ip访问我的服务。

我明天有空试一下!如果可以的话那太OK了!谢谢!

我试过了,不行的! 在同一台电脑里可以通过IP访问,在其他电脑上的确不可以的!我想想也是不可以的!其它电脑怎么会识别https://netfly/..?!
netfly 写道

在其他电脑上,一样可以通过ip访问我的服务

上面这句话你有没有证实过?
19 楼 sunnyme 2006-12-29  
看了这个页面:
Using CAS without the CAS login screen

再结合:
引用
edu.yale.its.tp.cas.client.filter.gateway: value of CAS "gateway" parameter. Redirects initial call through CAS and if the user has logged in, validates the ticket on return. If the user has not logged in, returns to the web application without setting the CAS_FILTER_USER variable. Note that once a redirect through CAS has occurred, the filter will not automatically try again to log the user in. You can then either provide an explicit CAS login link (https://cas-server/cas/login?service=http://your-app) or set up two instances of the filter mapped to different paths. One instance would have gateway=true, the other wouldn't. When you need the user to be logged in, direct him/her to the path of the other filter.


我是这么理解Gateway的:
1、默认情况下,gateway=false,未认证用户访问客户端应用,被重定向到CAS,CAS会返回认证页面给用户,提示用户输入身份信息。
2、gateway=true时,未认证用户访问客户端应用,被重定向到CAS,CAS会直接重定向回客户端应用。CAS客户端会做一个标识(maybe?),以后这个会话的请求,虽然用户未被认证,但也不会再重定向到CAS。
3、对于用户已认证的情况,gateway=true\false,处理是一样。
4、gateway=true,应该是用在客户端应用本身有认证页面,不希望用户同其交互时,浏览器会跳转到另外一个应用--CAS的页面,或者客户端应用并不是十分在意用户是否通过认证,即允许匿名访问。

这是我的一点理解,也是刚刚看CAS,请大家指正。
18 楼 sunnyme 2006-12-29  
证书CN的问题,我都是这样处理的,可以在生成密钥时,将CN设置为需要的域名,系统实施后,域名自然由DNS处理,开发过程中测试,可以修改本地的hosts表,添加域名到本机(CAS所在机)地址的映射,使用浏览器访问,不要走代理,一般就ok了。

另外,LZ,关于gateway的理解,有没有进展呀?我也看晕了。
17 楼 netfly 2006-12-27  
引用
所有者:CN=10.170.150.95, OU=inventec, O=inventec, L=xi'an, ST=shanxi, C=86
签发人:CN=10.170.150.95, OU=inventec, O=inventec, L=xi'an, ST=shanxi, C=86

早就强调过,所有者不能使用ip!
16 楼 netfly 2006-12-26  
请注意,
1.是否严格安配置篇的步骤进行配置
2.client端的web.xml文件是否使用了ip?除开client端,其他都不能使用ip
3.如果是多台机器,检查能否ping 你的cas server,如果不能,请在C:\WINDOWS\system32\drivers\etc\hosts\中加入你的cas server ip address.
这是web.xml范例:
    <filter>
        <filter-name>CASFilter</filter-name>
        <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
        <init-param>
            <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
            <param-value>https://Solaris4Oracle:8443/cas/login</param-value>
        </init-param><!--这里的server是服务端的IP-->
        <init-param>
            <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
            <param-value>https://Solaris4Oracle:8443/cas/proxyValidate</param-value>
        </init-param><!--这里的serName是服务端的主机名,而且必须是-->
        <init-param>
          <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
          <param-value>192.168.6.167:8080</param-value><!--client:port就是需要CAS需要拦截的地址和端口,一般就是这个TOMCAT所启动的IP和port-->
        </init-param>
    </filter>


一句话,引起那种错误的原因,一个是证书错误,一个就是网络错误。
15 楼 hf200012 2006-12-26  
我试了,客户端登陆以后出现
javax.servlet.ServletException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator proxyList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://10.170.150.95:8443/cas/ServiceValidate] ticket=[ST-6-AnSoGcxl7qoqzGpsNx5dmkNbjBQfmqBVFcw-20] service=[http%3A%2F%2F10.170.150.95%3A8082%2Fservlets-examples%2Fservlet%2FHelloWorldExample] renew=false]]]
edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:381)


root cause

edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator proxyList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://10.170.150.95:8443/cas/ServiceValidate] ticket=[ST-6-AnSoGcxl7qoqzGpsNx5dmkNbjBQfmqBVFcw-20] service=[http%3A%2F%2F10.170.150.95%3A8082%2Fservlets-examples%2Fservlet%2FHelloWorldExample] renew=false]]]
edu.yale.its.tp.cas.client.CASReceipt.getReceipt(CASReceipt.java:52)
edu.yale.its.tp.cas.client.filter.CASFilter.getAuthenticatedUser(CASFilter.java:455)
edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:378)


C:\Documents and Settings\inc062977.INC>keytool -genkey  -alias tomcat -keyalg RSA
输入keystore密码:
再次输入新密码:
您的名字与姓氏是什么?
  [Unknown]:  zhangfeng
您的组织单位名称是什么?
  [Unknown]:  browse
您的组织名称是什么?
  [Unknown]:  inventec application
您所在的城市或区域名称是什么?
  [Unknown]:  xi'an
您所在的州或省份名称是什么?
  [Unknown]:  shanxi
该单位的两字母国家代码是什么
  [Unknown]:  86
CN=zhangfeng, OU=browse, O=inventec application, L=xi'an, ST=shanxi, C=86 正确吗?
  [否]:  y

输入<tomcat>的主密码
        (如果和 keystore 密码相同,按回车):
再次输入新密码:

C:\Documents and Settings\inc062977.INC>keytool -genkey  -alias tomcat -keyalg RSA
输入keystore密码:
再次输入新密码:
您的名字与姓氏是什么?
  [Unknown]:  10.170.150.95
您的组织单位名称是什么?
  [Unknown]:  inventec
您的组织名称是什么?
  [Unknown]:  inventec
您所在的城市或区域名称是什么?
  [Unknown]:  xi'an
您所在的州或省份名称是什么?
  [Unknown]:  shanxi
该单位的两字母国家代码是什么
  [Unknown]:  86
CN=10.170.150.95, OU=inventec, O=inventec, L=xi'an, ST=shanxi, C=86 正确吗?
  [否]:  y

输入<tomcat>的主密码
        (如果和 keystore 密码相同,按回车):
再次输入新密码:

C:\Documents and Settings\inc062977.INC>keytool –export –file server.crt –alias t
keytool错误: java.lang.RuntimeException: 用法错误,–export 不是合法的命令

C:\Documents and Settings\inc062977.INC>keytool –export -file server.crt -alias tom
keytool错误: java.lang.RuntimeException: 用法错误,–export 不是合法的命令

C:\Documents and Settings\inc062977.INC>keytool -export -file server.crt -alias tomc
输入keystore密码:
保存在文件中的认证 <server.crt>

C:\Documents and Settings\inc062977.INC>keytool -import -keystore $JAVA_HOME\jre\lib
输入keystore密码:
再次输入新密码:
所有者:CN=10.170.150.95, OU=inventec, O=inventec, L=xi'an, ST=shanxi, C=86
签发人:CN=10.170.150.95, OU=inventec, O=inventec, L=xi'an, ST=shanxi, C=86
序列号:45909b98
有效期: Tue Dec 26 11:48:40 CST 2006 至Mon Mar 26 11:48:40 CST 2007
证书指纹:
         MD5:50:56:15:B0:E5:96:26:B5:80:CB:6F:2D:C0:FF:AC:13
         SHA1:17:BF:EC:F1:88:91:F8:CD:BF:82:10:8A:A8:3A:21:58:19:D9:5A:AE
         签名算法名称:SHA1withRSA
         版本: 3
信任这个认证? [否]:  y
认证已添加至keystore中
keytool错误: java.io.FileNotFoundException: $JAVA_HOME\jre\lib\security\cacerts (系

C:\Documents and Settings\inc062977.INC>keytool -import -keystore d:\Java\jdk1.6.0\j
输入keystore密码:
所有者:CN=10.170.150.95, OU=inventec, O=inventec, L=xi'an, ST=shanxi, C=86
签发人:CN=10.170.150.95, OU=inventec, O=inventec, L=xi'an, ST=shanxi, C=86
序列号:45909b98
有效期: Tue Dec 26 11:48:40 CST 2006 至Mon Mar 26 11:48:40 CST 2007
证书指纹:
         MD5:50:56:15:B0:E5:96:26:B5:80:CB:6F:2D:C0:FF:AC:13
         SHA1:17:BF:EC:F1:88:91:F8:CD:BF:82:10:8A:A8:3A:21:58:19:D9:5A:AE
         签名算法名称:SHA1withRSA
         版本: 3
信任这个认证? [否]:  y
认证已添加至keystore中
14 楼 netfly 2006-12-23  
to boogie:
不是,只是告诉你需要知道请求来自那个域
看看这个帖,也许你能明白
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=29304&threadID=36975&tstart=60
13 楼 boogie 2006-12-22  
netfly 写道

Since the SSL certificate is bound to the domain name, you have to already know which domain the request is for before the request is decrypted.

这话有点不太明白,是不是说CAS SERVER必须和其它需要CAS认证的应用在同一个域里?
12 楼 boogie 2006-12-22  
netfly 写道
to boogie:
假如我的电脑ip为192.168.6.110,我的电脑名为netfly
那么,在生成证书的时候,就不能输入localhost,只能输入netfly,在其他电脑上,一样可以通过ip访问我的服务。

我明天有空试一下!如果可以的话那太OK了!谢谢!
11 楼 netfly 2006-12-22  
补充:关于cookie在哪里产生?
login.sendTgc()
	private TicketGrantingTicket sendTgc(String username,
			HttpServletRequest request, HttpServletResponse response)
			throws ServletException {
		try {
			TicketGrantingTicket t = new TicketGrantingTicket(username);
			String token = tgcCache.addTicket(t);
			Cookie tgc = new Cookie(TGC_ID, token);
			tgc.setSecure(true);
			tgc.setMaxAge(-1);
			tgc.setPath(request.getContextPath());
			response.addCookie(tgc);
			return t;
		} catch (TicketException ex) {
			throw new ServletException(ex.toString());
		}
	}
10 楼 netfly 2006-12-22  
to boogie:
http://wiki.liferay.com/index.php/Single_SignOn_-_Integrating_Liferay_With_CAS_Server


Generate the SSL cert with Java keytool
Now that we have everything we need, it's time to generate an SSL cert for our CAS server. Instructions and more information on SSL certs can be found here

But I found some typos and errors on that page. So following the instructions below should get you what you need.

In any directory ( I use my root ) enter the command:

keytool -genkey -alias tomcat -keypass changeit -keyalg RSA

Answer the questions: (note that your firstname and lastname MUST be hostname of your server and cannot be a IP address; this is very important as an IP address will fail client hostname verification even if it is correct)


Since the SSL certificate is bound to the domain name, you have to already know which domain the request is for before the request is decrypted.
9 楼 netfly 2006-12-22  
windyboy 写道
早前我用CAS整合acegi的时候发现CAS在处理ticket上的一个bug
不知道楼主有没有发现,又或者CAS在新的版本中已经修正这个错误


是那个if判断吗?目前还没有去尝试。着急去整合ldap、ca了。
8 楼 netfly 2006-12-22  
to boogie:
非常遗憾,经过查证,SSL协议只支持domain name,也就是你可以用你的计算机名或者localhost,我用domain name做过测试,完全正确。

假如我的电脑ip为192.168.6.110,我的电脑名为netfly
那么,在生成证书的时候,就不能输入localhost,只能输入netfly,在其他电脑上,一样可以通过ip访问我的服务。比如说,输入
http://192.168.6.110:8080/YaleCASTest/hello.jsp
http://192.168.6.110:8080/YaleCASTest/servlet/RequestInfo

都可以返回正确的信息,不过,web.xml也要改改,如下:


    <filter>
        <filter-name>CASFilter</filter-name>
        <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
        <init-param>
            <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
            <param-value>https://netfly:8443/cas/login</param-value>
        </init-param><!--这里的server是服务端的IP-->
        <init-param>
            <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
            <param-value>https://netfly:8443/cas/proxyValidate</param-value>
        </init-param><!--这里的serName是服务端的主机名,而且必须是-->
        <init-param>
          <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
          <param-value>netfly:8080</param-value><!--client:port就是需要CAS需要拦截的地址和端口,一般就是这个TOMCAT所启动的IP和port-->
        </init-param>
    </filter>
7 楼 boogie 2006-12-22  
netfly 写道
to boogie, 我在尝试,出结果会与您共享

非常期待!!
就是因为这个原因使我在项目里不能使用这么好多东东!可惜!
据Yale官方论坛说是为了安全问题!可我们企业内部用的系统都是直接用IP地址的,总不能为了这个而去建个域名服务器吧!

相关推荐

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

    **Yale CAS Server的部署及cas-java-client 3.2的应用** CAS(Central Authentication Service)是一种广泛使用的基于Web的身份...同时,了解这些关键概念和最佳实践将有助于构建更安全、可扩展的身份验证解决方案。

    Yale CAS最佳实践.rar

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

    CAS 开发综合笔记

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

    CAS-SSO-TRIAL.zip_CAS_CAS SSO_java sso_sso

    7. **安全考虑**:讨论实施SSO时的安全最佳实践,如加密通信、防止票证重放攻击等。 8. **故障排查和日志分析**:提供解决常见问题的指南,以及如何解读CAS的日志以进行调试。 为了全面理解并实现这个教程,你需要...

    yale-cas服务器端深度定制

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

    cas-4.0.0.tar.gz

    8. **安全性和最佳实践**:为了确保CAS系统的安全,应定期更新到最新版本以获取安全补丁,同时遵循最佳实践,如使用HTTPS,限制无效尝试,启用审计日志以便追踪异常活动。 总之,CAS-4.0.0.tar.gz是一个包含全面...

    单点登录cas参考

    ### CAS单点登录框架 #### 一、CAS简介 单点登录(Single Sign On,简称SSO)是一种用户登录管理方式,用户只需要在一处...在实际应用中,开发人员需要密切关注CAS社区的更新和技术文档,以获取最新信息和最佳实践。

    WAS与CAS配置

    总之,WAS与CAS之间的SSO配置是一个需要细致操作的集成过程,需要对WAS和CAS都有一定的了解,并严格遵循相关的配置指南和最佳实践。成功配置后,可以实现用户在多个应用间的无缝登录体验,大大提升用户便利性和系统...

    cas实现单点登录 功能

    开发者应遵循最佳实践,确保 CAS 配置的安全性。 总结,CAS 作为一个强大的单点登录解决方案,为企业级应用提供了高效的身份验证管理。通过理解 CAS 的核心原理和实践步骤,开发者可以轻松地在 Java 应用中集成 CAS...

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

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

Global site tag (gtag.js) - Google Analytics