CAS单点登录技术研究解读.docx
- 文档编号:10304955
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:22
- 大小:141.56KB
CAS单点登录技术研究解读.docx
《CAS单点登录技术研究解读.docx》由会员分享,可在线阅读,更多相关《CAS单点登录技术研究解读.docx(22页珍藏版)》请在冰豆网上搜索。
CAS单点登录技术研究解读
SSO单点登录技术研究报告
--基于CAS框架的分析与技术研究
目录
1引言4
1.1摘要4
1.2范围4
1.3读者对象4
1.4关键词4
2技术背景4
3CAS单点登录简介(针对实践选择的技术)5
3.1技术快速使用说明5
3.1.1设置服务器域名5
3.1.2生成证书(这里采用JDK自带的工具keytool)5
3.1.3为客户端JVM导入证书6
3.1.4将证书应用到Web服务器Tomcat7
3.1.5部署CAS服务器7
3.1.6深入配制CAS服务器7
3.1.7配制CAS客户端8
3.1.8用到的jar包8
3.1.9CAS深入研究8
4开发环境的配置8
5运行环境的配置9
6结束语9
7参考文献9
1引言
1.1摘要
单点登录(Singlesignon),简称SSO,是目前比较流行的企业业务整合的解决方案之一。
SSO的定义是在多个系统中,用户只需要登录一次就可以在各各相互信任的系统中进行切换。
本文主要介绍它的简单部署以及源码分析,逻辑分析。
官网:
http:
//www.jasig.org/cas
1.2范围
单点登录的配置、登录方式、项目之间建立的信任关系。
单点登录的客户端服务端处理逻辑,源码分析。
1.3读者对象
技术组人员
1.4关键词
CAS、SSO、单点登录
2技术背景
⏹技术原理
当用户第一次访问系统时,因为还没有登录,所以会被引入到认证系统中进行登录,根据用户提供的身份信息,系统进行校验,如果通过效验则返回给用户一个Ticket认证凭据,用户再次访问别的系统时就会将此Ticket带上做为自己的认证凭据送到认证系统中进行效验,检查Ticket的合法性,如通过效验则不必登录直接进入第二个系统。
⏹目前主要流行的产品列表
AccessMatrixUSO(byi-SprintInnovations)
Athensaccessandidentitymanagement
CentralAuthenticationService(CAS)
COMA
CoSign
DistributedAccessControlSystem(DACS)
EnterpriseSignOnEngine
EvidianEnterpriseSSO
Facebookconnect
FreeIPA
GlobalLoginSystem
ImprivataOneSign(Enterprisesinglesign-onandstrongauthentication)
JBossSSO
JOSSO(OpenSourceSingleSign-OnServer)
Kerberos
myOneLogin(Securesinglesign-onforthecloud)
OneLogin(singlesign-onanduserprovisioningforthecloud)
OpenAM(previouslyOpenSSO)
OpenASelect
Passlogix
SAML
SecureNetworkCommunications
Shibboleth
Smartcard
TigerOneConnect
UbuntuSingleSignOn(OpenID-basedsinglesignonservice)
WindowsLiveID
⏹在项目中做出的技术选择以及原因
Ø选择的技术:
CAS
Ø原因:
项目开源、企业中用此技术的比较多、较稳定、网络参考资料较多。
3CAS单点登录简介(针对实践选择的技术)
3.1技术快速使用说明
3.1.1Http配置教程
1.首先是需要在CAS服务器配置是CAS服务器端支持http协议方式
主要改进一下配置文件:
ticketGrantingTicketCookieGenerator.xml配置文件:
[html]viewplaincopyprint?
1 2p: cookieSecure="true" 3p: cookieMaxAge="-1" 4p: cookieName="CASTGC" 5p: cookiePath="/cas"/> 将这个地方的配置改为下面的配置: [html]viewplaincopyprint? 6 7p: cookieSecure="false" 8p: cookieMaxAge="-1" 9p: cookieName="CASTGC" 10p: cookiePath="/cas"/> warnCookieGenerator.xml配置文件 [html]viewplaincopyprint? 11 12p: cookieSecure="true" 13p: cookieMaxAge="-1" 14p: cookieName="CASPRIVACY" 15p: cookiePath="/cas"/> 将这个地方的配置改为下面的配置: [html]viewplaincopyprint? 16 17p: cookieSecure="false" 18p: cookieMaxAge="-1" 19p: cookieName="CASPRIVACY" 20p: cookiePath="/cas"/> deployerConfigContext.xml配置文件: [html]viewplaincopyprint? 21 22p: httpClient-ref="httpClient" 23/> 将这个地方的配置文件修改为下面的配置: [html]viewplaincopyprint? 24 25p: httpClient-ref="httpClient" 26p: requireSecure="false" 27/> 完成这些地方的修改后,服务器端就支持了http协议的访问了下面开始客户端的改动,客户端其实就是将client.jar包里面关于https协议的处理代码给屏蔽掉,已经重新打jar包出来了,直接就能使用。 原理如下。 看过CAS客户端的源码的都知道,在配置过滤器类中,都做了访问协议的判断如下代码: [html]viewplaincopyprint? 1if(casServiceUrl! =null){ 2if(! (casServiceUrl.startsWith("https: //")||(casServiceUrl.startsWith("http: //")))){ 3thrownewServletException("serviceURLmuststartwithhttp: //orhttps: //;itscurrentvalueis["+casServiceUrl+"]"); 4} 5} 所以首先我们要做的是需要将casclient.jar的源码找到,将上面类似的这种协议判断屏蔽掉。 具体在一下2个类里面: 第一个是: CASFilter这个类里面中的init()方法中,https的判断屏蔽后如下: [html]viewplaincopyprint? 6if(casGateway&&Boolean.valueOf(casRenew).booleanValue()){ 7thrownewServletException("gatewayandrenewcannotbothbetrueinfilterconfiguration"); 8} 9if(casServerName! =null&&casServiceUrl! =null){ 10thrownewServletException("serverNameandserviceUrlcannotbothbeset: chooseone."); 11} 12if(casServerName==null&&casServiceUrl==null){ 13thrownewServletException("oneofserverNameorserviceUrlmustbeset."); 14} 15/*if(casServiceUrl! =null){ 16if(! (casServiceUrl.startsWith("https: //")||(casServiceUrl.startsWith("http: //")))){ 17thrownewServletException("serviceURLmuststartwithhttp: //orhttps: //;itscurrentvalueis["+casServiceUrl+"]"); 18} 19}*/ 20 21if(casValidate==null){ 22thrownewServletException("validateUrlparametermustbeset."); 23} 24/*if(! casValidate.startsWith("https: //")){ 25thrownewServletException("validateUrlmuststartwithhttps: //,itscurrentvalueis["+casValidate+"]"); 26} 27*/ 28if(casAuthorizedProxy! =null){ 29 30//parseandrememberauthorizedproxies 31StringTokenizercasProxies= 32newStringTokenizer(casAuthorizedProxy); 33while(casProxies.hasMoreTokens()){ 34StringanAuthorizedProxy=casProxies.nextToken(); 35/*if(! anAuthorizedProxy.startsWith("https: //")){ 36thrownewServletException("CASFilterinitializationparameterforauthorizedproxies"+ 37"mustbeawhitespacedelimitedlistofauthorizedproxies."+ 38"Authorizedproxiesmustbesecure(https)addresses.Thisonewasn't: ["+anAuthorizedProxy+"]"); 39}*/ 40this.authorizedProxies.add(anAuthorizedProxy); 41} 42} 第二个是: edu.yale.its.tp.cas.util.SecureURL这个类里面的retrieve方法中,屏蔽后如下: [html]viewplaincopyprint? 43URLu=newURL(url); 44/*if(! u.getProtocol().equals("https")){ 45//IOExceptionmaynotbethebestexceptionwecouldthrowhere 46//sincetheproblemiswiththeURLargumentwewerepassed,not 47//IO.-awp9 48log.error("retrieve("+url+")onanillegalURLsinceprotocolwasnothttps."); 49thrownewIOException("only'https'URLsarevalidforthismethod"); 50}*/ 51 52URLConnectionuc=u.openConnection(); 重新打包后将casclient.jar更新到我们的程序第三方lib包中。 做完这些,就能达到能让服务器利用http协议进行登录cas服务端的效果。 3.1.2Https配置教程 3.1.2.1设置服务器域名 ⏹修改hosts文件 在SERVER端C: \\Windows下搜索hosts文件,并在最后边一行加上如下内容: 127.0.0.1castest#Server 同样在CLIENT端也应有相对应的设置: SERVERIPcastest#client(这里的SERVERIP是指服务端的IP) 3.1.2.2生成证书(这里采用JDK自带的工具keytool) ⏹简述: CAS单点登录系统中服务端与客户端进行安全通信的保障就是证书钥匙,这里的证书是采用JDK所自带的keytool生成的证书,如果是在正式环境中部署应去供应商处购买。 ⏹官网: 3.1.2.3生成服务器端证书文件 Keytool–genkey–aliasserver–keyalgRSA–keystoreserverkey 注: 这里的名字与姓氏最好填写域名,严禁使用IP,此处密码采用的是changeit与JDK默认密码一致,可随意设置(不要忘记)。 3.1.2.4导出服务端证书 Keytool–export–fileserver.crt–aliasserver–keystoreserverkey 注: 此处密码与上方设置密码相同 3.1.2.5为客户端JVM导入证书 将生成的server.crt文件分发给各个客户端后,使用CMD命令为JVM导入证书。 Keytool–import–keystore%java_home%\jre\lib\cacerts–fileserver.crt–aliasserver 视个人情况而定,网上好多帖子都说是jre下的cacerts而不是jdk/jre/cacerts,这主要是看tomcat用哪个jre,视个人情况而论。 此所用到的是jdk中的jre 也可以自己指定目录,创建完cacerts后再将其复至到jre/lib/security/也可以。 但这样会覆盖JDK原有的证书(不建议使用) 至此基本环境已经配好。 注: 此部署是在客户机上导入,不需要在服务器中导入。 3.1.2.6将证书应用到Web服务器Tomcat 启用Tomcat的https加密协议,至于为什么加密自己去GOOGLE一下。 将Tomcat下的conf/server.xml里如下代码的注释去掉,并加入证书的路径和密码。 OK,这样SSL就启用成功了,可以进入https: //castest: 8443/查看一下是否启用成功 注: 此步客户端与服务端都需要配置,直接将服务器端生成的文件发给客户端使用即可,此处所用到的serverkey是在服务端生成的证书文件,密码为自定义设置的密码 3.1.3部署CAS服务器 ⏹CAS服务端下载: http: //www.jasig.org/cas/download ⏹下载的包解压后,将cas-server-3.4.5\modules\cas-server-webapp-3.4.5.war复制到webapps目录下,重命名为cas.war ⏹启动TOMCAT访问地址: https: //castest: 8443/cas/login ⏹输入admin/admin(用户名和密码相同即可)后即可登录,登录成功后的页面为: 如果没有成功,请仔细检查上边的步骤 3.1.4深入配制CAS服务器 上边的登录只是CAS默认的登录,在我们的系统应用中都是从数据库中获取的信息,所以这里需要更改一下配置。 ⏹将deployerConfigContext.xml中的如下行注释掉: ⏹ ⏹加入代码,见附件1 ⏹将所用连接的数据库驱动和cas-server-support-jdbc-3.4.3.1.jar放入工程中的lib下 ⏹cas.properties中使用哪种数据库就将相应驱动前边的#去掉 3.1.5配制CAS客户端 ⏹http配置使用cas-client-http.jar ⏹https配置使用cas-client-https.jar,地址: http: //www.ja-sig.org/downloads/cas-clients/,然后解压cas-client-3.2.0.zip,在modules文件夹中有需要的jar包,请根据自己的项目情况选择使用 ⏹设置web.xml的filter如下 xmlversion="1.0"encoding="UTF-8"? > xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance"version="2.5" xsi: schemaLocation=" --解决中文乱码问题--> org.springframework.web.filter.CharacterEncodingFilter --解决中文乱码问题--> --用于单点退出--> org.jasig.cas.client.session.SingleSignOutHttpSessionListener org.jasig.cas.client.session.SingleSignOutFilter --用于单点登录--> edu.yale.its.tp.cas.client.filter.CASFilter edu.yale.its.tp.cas.client.filter.loginUrl --loginUrl: 服务端tomcat所启动的ip和port--> http: //192.168.168.141: 8080/casServer/login edu.yale.its.tp.cas.client.filter.validateUrl --validateUrl: 服务端tomcat所启动的ip和port--> http: //192.168.168.141: 8080/casServer/serviceValidate
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CAS 单点 登录 技术研究 解读
![提示](https://static.bdocx.com/images/bang_tan.gif)