1、CAS单点登录技术研究解读SSO单点登录技术研究报告 - 基于CAS框架的分析与技术研究目 录1 引言 41.1 摘要 41.2 范围 41.3 读者对象 41.4 关键词 42 技术背景 43 CAS单点登录简介(针对实践选择的技术) 53.1 技术快速使用说明 53.1.1 设置服务器域名 53.1.2 生成证书(这里采用JDK自带的工具keytool) 53.1.3 为客户端JVM导入证书 63.1.4 将证书应用到Web服务器Tomcat 73.1.5 部署CAS服务器 73.1.6 深入配制CAS服务器 73.1.7 配制CAS客户端 83.1.8 用到的jar包 83.1.9 CA
2、S深入研究 84 开发环境的配置 85 运行环境的配置 96 结束语 97 参考文献 91 引言1.1 摘要单点登录(Single sign on),简称SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个系统中,用户只需要登录一次就可以在各各相互信任的系统中进行切换。本文主要介绍它的简单部署以及源码分析,逻辑分析。官网:http:/www.jasig.org/cas1.2 范围单点登录的配置、登录方式、项目之间建立的信任关系。单点登录的客户端服务端处理逻辑,源码分析。1.3 读者对象技术组人员1.4 关键词CAS、SSO、单点登录2 技术背景 技术原理当用户第一次访问系统
3、时,因为还没有登录,所以会被引入到认证系统中进行登录,根据用户提供的身份信息,系统进行校验,如果通过效验则返回给用户一个Ticket认证凭据,用户再次访问别的系统时就会将此Ticket带上做为自己的认证凭据送到认证系统中进行效验,检查Ticket的合法性,如通过效验则不必登录直接进入第二个系统。 目前主要流行的产品列表AccessMatrix USO (by i-Sprint Innovations) Athens access and identity management Central Authentication Service (CAS) COMA CoSign Distribute
4、d Access Control System (DACS) Enterprise Sign On Engine Evidian Enterprise SSO Facebook connect FreeIPA Global Login System Imprivata OneSign (Enterprise single sign-on and strong authentication) JBoss SSO JOSSO (Open Source Single Sign-On Server) Kerberos myOneLogin (Secure single sign-on for the
5、cloud) OneLogin (single sign-on and user provisioning for the cloud) OpenAM (previously OpenSSO) OpenASelect Passlogix SAML Secure Network Communications Shibboleth Smart card Tiger OneConnect Ubuntu Single Sign On (OpenID-based single sign on service) Windows Live ID 在项目中做出的技术选择以及原因 选择的技术:CAS 原因:项目
6、开源、企业中用此技术的比较多、较稳定、网络参考资料较多。3 CAS单点登录简介(针对实践选择的技术)3.1 技术快速使用说明3.1.1 Http配置教程 1.首先是需要在CAS服务器配置是CAS服务器端支持http协议方式主要改进一下配置文件:ticketGrantingTicketCookieGenerator.xml 配置文件:html view plaincopyprint?1 将这个地方的配置改为下面的配置:html view plaincopyprint?6 warnCookieGenerator.xml 配置文件html view plaincopyprint?11 将这个地方的配
7、置改为下面的配置:html view plaincopyprint?16 deployerConfigContext.xml 配置文件:html view plaincopyprint?21 将这个地方的配置文件修改为下面的配置:html view plaincopyprint?24 完成这些地方的修改后,服务器端就支持了http协议的访问了 下面开始客户端的改动,客户端其实就是将client.jar包里面关于https协议的处理代码给屏蔽掉,已经重新打jar包出来了,直接就能使用。原理如下。看过CAS客户端的源码的都知道,在配置过滤器类中,都做了访问协议的判断 如下代码:html view
8、plaincopyprint?1 if (casServiceUrl != null) 2 if (! (casServiceUrl.startsWith(https:/)| (casServiceUrl.startsWith(http:/) ) 3 throw new ServletException(service URL must start with http:/ or https:/; its current value is + casServiceUrl + ); 4 5 所以首先我们要做的 是需要将casclient.jar的源码找到,将上面类似的这种协议判断屏蔽掉。具体在一下
9、2个类里面:第一个是:CASFilter这个类里面中的init()方法中,https的判断屏蔽后如下:html view plaincopyprint?6 if (casGateway & Boolean.valueOf(casRenew).booleanValue() 7 throw new ServletException(gateway and renew cannot both be true in filter configuration); 8 9 if (casServerName != null & casServiceUrl != null) 10 throw new Ser
10、vletException(serverName and serviceUrl cannot both be set: choose one.); 11 12 if (casServerName = null & casServiceUrl = null) 13 throw new ServletException(one of serverName or serviceUrl must be set.); 14 15 /* if (casServiceUrl != null) 16 if (! (casServiceUrl.startsWith(https:/)| (casServiceUr
11、l.startsWith(http:/) ) 17 throw new ServletException(service URL must start with http:/ or https:/; its current value is + casServiceUrl + ); 18 19 */ 20 21 if (casValidate = null) 22 throw new ServletException(validateUrl parameter must be set.); 23 24 /* if (! casValidate.startsWith(https:/) 25 th
12、row new ServletException(validateUrl must start with https:/, its current value is + casValidate + ); 26 27 */ 28 if (casAuthorizedProxy != null) 29 30 / parse and remember authorized proxies 31 StringTokenizer casProxies = 32 new StringTokenizer(casAuthorizedProxy); 33 while (casProxies.hasMoreToke
13、ns() 34 String anAuthorizedProxy = casProxies.nextToken(); 35 /* if (!anAuthorizedProxy.startsWith(https:/) 36 throw new ServletException(CASFilter initialization parameter for authorized proxies + 37 must be a whitespace delimited list of authorized proxies. + 38 Authorized proxies must be secure (
14、https) addresses. This one wasnt: + anAuthorizedProxy + ); 39 */ 40 this.authorizedProxies.add(anAuthorizedProxy); 41 42 第二个是:edu.yale.its.tp.cas.util.SecureURL这个类里面的retrieve方法中,屏蔽后如下:html view plaincopyprint?43 URL u = new URL(url); 44 /*if (!u.getProtocol().equals(https) 45 / IOException may not b
15、e the best exception we could throw here 46 / since the problem is with the URL argument we were passed, not 47 / IO. -awp9 48 log.error(retrieve( + url + ) on an illegal URL since protocol was not https.); 49 throw new IOException(only https URLs are valid for this method); 50 */ 51 52 URLConnectio
16、n uc = u.openConnection(); 重新打包后将casclient.jar更新到我们的程序第三方lib包中。 做完这些,就能达到能让服务器利用http协议进行登录cas服务端的效果。3.1.2 Https配置教程3.1.2.1 设置服务器域名 修改hosts文件在SERVER端C:Windows下搜索hosts文件,并在最后边一行加上如下内容:127.0.0.1 castest #Server 同样在CLIENT端也应有相对应的设置:SERVER IP castest #client (这里的SERVER IP是指服务端的IP)3.1.2.2 生成证书(这里采用JDK自带的工
17、具keytool) 简述:CAS单点登录系统中服务端与客户端进行安全通信的保障就是证书钥匙,这里的证书是采用JDK所自带的keytool生成的证书,如果是在正式环境中部署应去供应商处购买。 官网: 3.1.2.3 生成服务器端证书文件Keytool genkey alias server keyalg RSA keystore serverkey 注:这里的名字与姓氏最好填写域名,严禁使用IP,此处密码采用的是changeit与JDK默认密码一致,可随意设置(不要忘记)。3.1.2.4 导出服务端证书Keytool export file server.crt alias server key
18、store serverkey注:此处密码与上方设置密码相同3.1.2.5 为客户端JVM导入证书将生成的server.crt文件分发给各个客户端后,使用CMD命令为JVM导入证书。Keytool import keystore %java_home% jrelibcacerts file server.crt alias server视个人情况而定,网上好多帖子都说是jre下的cacerts而不是jdk/jre/cacerts,这主要是看tomcat用哪个jre,视个人情况而论。此所用到的是jdk中的jre也可以自己指定目录,创建完cacerts后再将其复至到jre/lib/security
19、/也可以。但这样会覆盖JDK原有的证书(不建议使用)至此基本环境已经配好。注:此部署是在客户机上导入,不需要在服务器中导入。3.1.2.6 将证书应用到Web服务器Tomcat启用Tomcat的https加密协议,至于为什么加密自己去GOOGLE一下。将Tomcat下的conf/server.xml里如下代码的注释去掉,并加入证书的路径和密码。OK,这样SSL就启用成功了,可以进入https:/castest:8443/ 查看一下是否启用成功注:此步客户端与服务端都需要配置,直接将服务器端生成的文件发给客户端使用即可, 此处所用到的serverkey是在服务端生成的证书文件,密码为自定义设置的
20、密码3.1.3 部署CAS服务器 CAS服务端下载: http:/www.jasig.org/cas/download 下载的包解压后,将cas-server-3.4.5modulescas-server-webapp-3.4.5.war复制到webapps目录下,重命名为cas.war 启动TOMCAT访问地址:https:/castest:8443/cas/login 输入admin/admin(用户名和密码相同即可)后即可登录,登录成功后的页面为:如果没有成功,请仔细检查上边的步骤3.1.4 深入配制CAS服务器上边的登录只是CAS默认的登录,在我们的系统应用中都是从数据库中获取的信息,
21、所以这里需要更改一下配置。 将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,在m
22、odules文件夹中有需要的jar包,请根据自己的项目情况选择使用 设置web.xml的filter如下web-app xmlns= xmlns:xsi=http:/www.w3.org/2001/XMLSchema-instance version=2.5 xsi:schemaLocation= spring filter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 spring filter /* org.jasig.cas.client.session.SingleSignOutHttpSes
23、sionListener CAS Single Sign Out Filter org.jasig.cas.client.session.SingleSignOutFilter CAS Filter edu.yale.its.tp.cas.client.filter.CASFilter edu.yale.its.tp.cas.client.filter.loginUrl http:/192.168.168.141:8080/casServer/login edu.yale.its.tp.cas.client.filter.validateUrl http:/192.168.168.141:8080/casServer/serviceValidate
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1