Cas-server服务器搭建3.3.1
作者:wangmj
创建日期:2009-06-05
修改日期:2009-07-02
版本:1.1
首先进入目录E:/javagood/cas-server-3.3.1
注意:现在使用的是jdk1.6.0_14
E:/javagood/cas-server-3.3.1>set PATH=d:/jdk1.6.0_14/bin;%PATH%
E:/javagood/cas-server-3.3.1>set PATH=d:/jdk1.6.0_14/bin;%PATH%
E:/javagood/cas-server-3.3.1>keytool -genkey -alias tomcat -keystore ./mydestore
-keyalg RSA -validity 2000
输入keystore密码:
再次输入新密码:
您的名字与姓氏是什么?
[Unknown]: localhost
您的组织单位名称是什么?
[Unknown]: jiangquankeji
您的组织名称是什么?
[Unknown]: youxianzerengongsi
您所在的城市或区域名称是什么?
[Unknown]: jinan city
您所在的州或省份名称是什么?
[Unknown]: shandong
该单位的两字母国家代码是什么
[Unknown]: zh
CN=localhot, OU=jiangquankeji, O=youxianzerengongsi, L=jinan city, ST=shandong,
C=zh 正确吗?
[否]: y
输入
(如果和 keystore 密码相同,按回车):
E:/javagood/cas-server-3.3.1>
E:/javagood/cas-server-3.3.1>keytool -export -alias tomcat -keystore ./mydestore
-file server.crt
输入keystore密码:
保存在文件中的认证
注意:必须手工输入命令行
E:/javagood/cas-server-3.3.1>
E:/javagood/cas-server-3.3.1>keytool -import -alias tomcat -file ./server.crt -k
eystore D:/jdk1.6.0_14/jre/lib/security/cacerts
输入keystore密码:
所有者:CN=localhot, OU=jiangquankeji, O=youxianzerengongsi, L=jinan city, ST=sha
ndong, C=zh
签发人:CN=localhot, OU=jiangquankeji, O=youxianzerengongsi, L=jinan city, ST=sha
ndong, C=zh
序列号:4a4d52cf
有效期: Fri Jul 03 08:37:35 CST 2009 至Wed Dec 24 08:37:35 CST 2014
证书指纹:
MD5:C2:6E:E6:BC:21:E3:53:57:42:3F:B1:58:6D:4B:B9:AF
SHA1:E5:9D:81:6E:2C:77:0F:7E:14:6A:3D:74:1E:FD:DD:02:11:F2:1C:FF
签名算法名称:SHA1withRSA
版本: 3
信任这个认证? [否]: y
认证已添加至keystore中
E:/javagood/cas-server-3.3.1>
E:/javagood/cas-server-3.3.1>keytool -import -alias tomcat -file ./server.crt -k
eystore d:/jdk1.6.0_14/jre/lib/security/cacerts
输入keystore密码:
keytool错误: java.lang.Exception: 认证未输入,别名
E:/javagood/cas-server-3.3.1>keytool -delete -alias tomcat -file ./server.crt -k
eystore d:/jdk1.6.0_14/jre/lib/security/cacerts
输入keystore密码:
D:/jboss-4.2.3.GA/server/default/deploy/jboss-web.deployer/server.xml
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="e:/javagood/cas-server-3.3.1/mydestore "
keystorePass="changeit" />
将E:/javagood/cas-server-3.3.1/modules/cas-server-webapp-3.3.1.war
拷贝到D:/jboss-4.2.3.GA/server/default/deploy/下面,并且更名为cas-server.war
启动jboss4.2.3,注意jboss使用的jdk必须是刚才将认证导入的jdk,我们使用的是d:/jdk1.5.0
注意:现在使用的是jdk1.6.0_14
在IE浏览器中录入:http://localhost:8080/cas-server
登陆,录入的用户名和密码相同即可。
登陆后可以看到默认的画面:
注意:E:/javagood/cas-server-3.3.1/mydeystore 文件不能删除,或者将名称写错,否则服务器会报找不到的文件。
这里以ajaxtags-demo-1.5.war 和displaytag-examples-1.2.war两个web程序作为示例
还没有配置cas程序的时候,http://localhost:8080/ajaxtags-demo-1.5/
在IE的地址栏中录入:http://localhost:8080/displaytag-examples-1.2/
开始配置cas的内容,增加单点登陆功能
从E:/javagood/cas-client-2.0.11/java/lib找到casclient.jar
从E:/javagood/cas-client-3.1.3/modules 找到cas-client-core-3.1.3.jar 和commons-logging-1.1.jar
然后将这三个jar包拷贝到D:/jboss-4.2.3.GA/server/default/deploy/ajaxtags-demo-1.5.war/WEB-INF/lib
和D:/jboss-4.2.3.GA/server/default/deploy/displaytag-examples-1.2.war/WEB-INF/lib 下面
在两个web应用对应的web.xml中增加如下配置:
开始访问测试
先登陆http://localhost:8080/ajaxtags-demo-1.5/,系统会自动跳转到cas-server
登陆ajaxtags后 ,url自动增加一个ticket,
在当前的IE窗口,在录入http://localhost:8080/displaytag-examples-1.2/ 可以自动访问,如果点击IE图标打开一个新的IE窗口,录入http://localhost:8080/displaytag-examples-1.2/,这个时候还是无法认证通过,还会自动跳转到cas-server
如何退出?
访问https://localhost:8443/cas-server/logout就退出了。
注意事项:
访问形如http:// localhost:8080/cas-server/logout,这种通过http方式访问退出是不行的!!因为你不通过https来注销,CAS Server怎么"杀"掉它通过https发给你的TGC Cookie?
经过测试,通过http://localhost:8080/cas-server/logout 退出登陆后,确实可以再次访问当前的web程序,可见不通过https是无法真正退出单点登陆的
每个业务系统都有自己单独的权限控制,cas单点登陆后,如何和原来业务的权限系统结合?
如何将用户的id传递到原来系统中去?
login-user-name:<%=session.getAttribute("edu.yale.its.tp.cas.client.filter.user")%>
经过测试,可以获取到用户名,因为用户名是唯一的,获取到了用户名,那么用户的id,从数据再查询一下不就获取到了吗,hehe(虽然多访问了一次数据库,因为不是频繁访问,方案还是可以的。)
CAS Client端的API应用1.用户可以通过以下两种方式的任意一种,从JSP或servlet中获取通过认证的用户名:
引用
String username = (String)session.getAttribute(CASFilter.CAS_FILTER_USER);
或者
String username = (String)session.getAttribute("edu.yale.its.tp.cas.client.filter.user");
2.获得更完整的受认证用户信息对象CASReceipt Java Bean,可以使用以下语句的任一:
引用
CASReceipt receipt = (CASReceipt )session.getAttribute(CASFilter.CAS_FILTER_RECEIPT);
或者
CASReceipt receipt = (CASReceipt )session.getAttribute("edu.yale.its.tp.cas.client.filter.receipt");
l casConfirmView.jsp:当用户选择了“ warn ”时会看到的确认界面
l casGenericSuccess.jsp:在用户成功通过认证而没有目的Service时会看到的界面
l casLoginView.jsp:当需要用户提供认证信息时会出现的界面
这个页面可能会首先被定制
l casLogoutView.jsp:当用户结束 CAS单点登录系统会话时出现的界面
l top.jsp:上述4个文件的头部文件
l buttom.jsp:上述4个文件的尾部文件
l 包含各个语言的porp文件(比较casLoginView.jsp文件)
l common_rosters.js(参见casLoginView.jsp文件注释)
例如在cas-server进行认证的时候,可以通过数据库、ldap等方式认证用户,然后每个系统都有自己的用户,A系统的用户和B系统中的用户名称id和账户都不一致,如何进行统一。
例如cas-server认证的时候是以A系统的用户认证还是以B系统的用户认证?A系统的用户账号是aa,姓名张三,在B系统中账号是bb,姓名还是张三,也就是说同一个用户,在不同的系统中账户不同,单点登陆后,如果是cas-server是以aa进行的认证,在登陆B系统的时候,如何与B系统中的账户bb关联上?
解决方法一:
在系统中所有的与业务关联的都是用用户ID,而不要使用账号关联,账号就可以随意改动,这样在实现单点登陆的时候,获取到用户的账号,然后把账号传递给业务系统;以后所有新开发的系统用户的账号统一,就可以实现单点登陆了,但是如何保证账户维护一致呢?这个就需要用户自己统一账号了。
解决方法二:
正在思考中......
我的问题是这样的:现有几个系统(均是web的),都有自己的用户管理系统,现在想整合在一起,让他能进行统一登录,统一用户管理。我曾经考虑过用cas做统一登录。
但是有一点不明白,如果用cas的话,不是需要cas server端去读用户数据吗?我看可以使用jdbc去读取数据,这样是不是需要多个系统的用户数据都在同一张表呢?我对cas不熟悉,请大家帮忙解释解释。
另外使用cas进行统一登录,是不是都需要对用户进行统一管理?也就是说需要把各系统的用户数据统一到一张表进行管理?但如果各系统使用的是不一样的数据库,这样的情况怎么办?
今天看了一下cas的实现方案(Central Authentication Service)。发现它实际上也就是帮我们在多个系统之间共享了一下用户的登录名。
对于用户来说确实是减少了在多个系统之间重复输入用户名,密码的工作量。
但是对于程序开发者而言,除集中了一部分的用户帐号管理功能之外,还有什么其他的好处吗?
假如有a,b两个系统,每个系统的用户表里除了最基本的登录名及密码之外还各自关联了一些其他的用户信息,并且还与
系统内部的其他表存在某种关联,例如生成报表时需要用到特定的用户属性等等。
那采用了单点登录方案之后,我还是要维护各自系统内部的用户数据,并且还要实现系统内部的用户数据与cas server端
的用户数据同步(同步代价也不小吧)。就是说想做到用户的集中管理不是太现实的。
再说到用户的权限管理,每个系统对这个多系统之间的共享账户肯定是分配了不同的权限,应用系统拿到cas server返回的用户名之后还是要做当前系统的权限分配。
那多个系统之间进行界面(ui)级整合呢?我能设计一个通用的系统界面为所有的新老系统提供统一的用户管理,统
一的权限管理吗?
是不是可以这么说,对于单点登录这种系统整合方案,就是解决了少输入几次用户名,密码这个问题,到最后实际上到是增加了系统实现及整合的复杂度。
有什么好的解决方案可以将新老系统整合进一个通用的企业门户吗?
思路有点乱,写的也乱,大家有什么想法都交流一下吧。
其实我最后也明白了,不能想得太理想。
系统使用cas进行了整合,最后总了几点。
1,单点登录仅仅帮助我们在各个子系统中间安全的共享了一下用户名,省去了用户重复登陆的麻烦,统一了用户帐户的管理,至于用户在每个系统中的权限分配,还是继续交 给子系统完成吧。可以开发一个cas server端的集成界面(portal),方便用户在各个子系统中间的快速切换。
2,为了完善cas server的用户管理功能,需要在cas 的server,client端各自开放几个调用接口,保证子系统与cas server端的账户信息同步。
3,改造老系统时尽量为portal的集成开发新的访问入口(而不是去修改以前的代码使之兼容),这样既可以从集成portal访问,又可以从原有的访问地址访问。
E:/javagood/cas-server-3.3.1>keytool
keytool 用法:
-certreq [-v] [-protected]
[-alias <别名>] [-sigalg
[-file
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-changealias [-v] [-protected] -alias <别名> -destalias <目标别名>
[-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-delete [-v] [-protected] -alias <别名>
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-exportcert [-v] [-rfc] [-protected]
[-alias <别名>] [-file <认证文件>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-genkeypair [-v] [-protected]
[-alias <别名>]
[-keyalg
[-sigalg
[-validity
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-genseckey [-v] [-protected]
[-alias <别名>] [-keypass <密钥库口令>]
[-keyalg
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-help
-importcert [-v] [-noprompt] [-trustcacerts] [-protected]
[-alias <别名>]
[-file <认证文件>] [-keypass <密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-importkeystore [-v]
[-srckeystore <源密钥库>] [-destkeystore <目标密钥库>]
[-srcstoretype <源存储类型>] [-deststoretype <目标存储类型>]
[-srcstorepass <源存储库口令>] [-deststorepass <目标存储库口令>]
[-srcprotected] [-destprotected]
[-srcprovidername <源提供方名称>]
[-destprovidername <目标提供方名称>]
[-srcalias <源别名> [-destalias <目标别名>]
[-srckeypass <源密钥库口令>] [-destkeypass <目标密钥库口令>]]
[-noprompt]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-keypasswd [-v] [-alias <别名>]
[-keypass <旧密钥库口令>] [-new <新密钥库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-list [-v | -rfc] [-protected]
[-alias <别名>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
-printcert [-v] [-file <认证文件>]
-storepasswd [-v] [-new <新存储库口令>]
[-keystore <密钥库>] [-storepass <存储库口令>]
[-storetype <存储类型>] [-providername <名称>]
[-providerclass <提供方类名称> [-providerarg <参数>]] ...
[-providerpath <路径列表>]
E:/javagood/cas-server-3.3.1>