集成框架中使用CAS实现单点登录技术方案

上传人:z**** 文档编号:120288573 上传时间:2022-07-17 格式:DOC 页数:20 大小:161KB
收藏 版权申诉 举报 下载
集成框架中使用CAS实现单点登录技术方案_第1页
第1页 / 共20页
集成框架中使用CAS实现单点登录技术方案_第2页
第2页 / 共20页
集成框架中使用CAS实现单点登录技术方案_第3页
第3页 / 共20页
资源描述:

《集成框架中使用CAS实现单点登录技术方案》由会员分享,可在线阅读,更多相关《集成框架中使用CAS实现单点登录技术方案(20页珍藏版)》请在装配图网上搜索。

1、集成框架中使用CAS实现单点登录技术方案1、2、3、4、文档摘要1.1文档分类1.2关键字1.3使用SSO的最终目的1.4摘要1.5参考1.5修改历史技术方案2.1问题或场景22webSSO的原理2.3 CAS的基本原理CAS协议2.4 配置一个基本的CAS准备工作配置CAS服务器配置jboss服务器使用https协议配己置cas客户端测试SSO2.5 扩展认证接口及与数据库结合验证如何做扩展部署如何获取登录的用户名问题或不足改进意见附件.3.3.3.3.3.3.4.5.5.5.6.7.8.8.8.9.1.0.1.3.1.3.1.4.2.0.2.1.2.1.2.1.1、文档摘要1.1文档分类技

2、术方案-关于单点登录1.2关键字SSO、YaleCAS1.3使用SSO的最终目的1、实现一个易用的、能跨不同Web应用的单点登录认证中心;2、实现统一的用户身份和密钥管理,减少多套密码系统造成的管理成本和安全漏洞;3、降低认证模块在IT系统设计中的耦合度,提供更好的SOA设计和更弹性的安全策略1.4摘要本文描述如何实现多应用系统下的单点登录具体实现方案1.5参考YaleCAS网站(http:/www.yale.edu/tp/cas/)及网络相关技术文档1.5修改历史日期版本作者修改内容评审号更改请求号2008-6-181.0许建飞创建2、技术方案2.1问题或场景假设目前有多个WEB应用系统,采

3、用不同的语言开发,部署在不同的服务器上;每个系统分别管理着自己的用户。那么,客户在使用不同系统时就必须在不同的系统之间切换,反复的输入不同的用户名和密码。在系统集成时如何使用户只需要认证一次就能登入各个不同的系统?那么就必须采用用户身份集中管理、统一认证,这就涉及到单点登录(singlesign-onSSO的问题了。2.2 webSSO的原理WebSSO主要特点是,SSO应用之间走Web协议(女口HTTP/SSL),并且SSO都只有一个登录入口。j简单的SSO的体系中,会有下面三种角色:User(多个)Web应用(多个)SSO认证中心(1个)虽然SSO实现模式千奇百怪,但万变不离其宗:1、We

4、b应用不处理User的登录,否则就是多点登陆了,所有的登录都在SSO认证中心进行。2、SSO认证中心通过一些方法来告诉Web应用当前访问用户究竟是不是张三/李四3、SSO认证中心和所有的Web应用建立一种信任关系,SSO认证中心对用户身份正确性的判断会通过某种方法告之Web应用,而且判断结果必须被Web应用信任。2.3CAS的基本原理从结构体系看,CAS包含两部分:CASServerCASServer负责完成对用户的认证工作,CASServer需要独立部署,有不止一种CASServer的实现,YaleCASServer和ESUPCASServer都是很不错的选择。CASServer会处理用户名

5、/密码等凭证(Credentials),它可能会到数据库检索一条用户帐号信息,也可能在XML文件中检索用户密码,对这种方式,CAS均提供一种灵活但同一的接口/实现分离的方式,CAS究竟是用何种认证方式,跟CAS协议是分离的,也就是,这个认证的实现细节可以自己定制和扩展。CASClientCASClient负责部署在客户端(注意,我是指Web应用),原则上,CASClient的部署意味着,当有对本地Web应用的受保护资源的访问请求,并且需要对请求方进行身份认证,Web应用不再接受任何的用户名密码等类似的Credentials,而是重定向到CASServer进行认证。目前,CASClient支持(

6、某些在完善中)非常多的客户端,包括Java、.Net、ISAPI、Php、Perl、uPortal、Acegi、Ruby、VBScript等客户端,几乎可以这样说,CAS协议能够适合任何语言编写的客户端应用。2.4CAS协议CASClient与受保护的客户端应用部署在一起,以Filter方式保护受保护的资源。对于访问受保护资源的每个Web请求,CASClient会分析该请求的Http请求中是否包含ServiceTicket,如果没有,则说明当前用户尚未登录,于是将请求重定向到指定好的CASServer登录地址,并传递Service(也就是要访问的目的资源地址),以便登录成功过后转回该地址。用户

7、在第3步中输入认证信息,如果登录成功,CASServer随机产生一个相当长度、唯一、不可伪造的ServiceTicket并缓存以待将来验证,之后系统自动重定向到Service所在地址,并为客户端浏览器设置一个TicketGrantedCookie(TGC),CASClient在拿到Service和新产生的Ticket过后,在第5,6步中与CASServer进行身份合适,以确保ServiceTicket的合法性。在该协议中,所有与CAS的交互均采用SSL协议,确保,ST和TGC的安全性。协议工作过程中会有2次重定向的过程,但是CASClient与CASServer之间进行Ticket验证的过程对

8、于用户是透明的。另外,CAS协议中还提供了Proxy(代理)模式,以适应更加高级、复杂的应用场景2.5配置一个基本的CAS准备工作下载测试用的web应用服务器,;下载、;p本文通过以上版本举例说明。配置CAS服务器假设将CASserver端部署在jboss下,其他几个客户端应用系统分别在tomcat或者jboss下。由于CAS使用Https协议,所以首先要知道如何在jboss容器中配置SSL.;CAS勺客户端以一个Web应用的Filter运行。当Web应用的某个功能被请求时,Filter就会拦截应用的URL,从而迫使用户到CAS服务器进行登陆。在所有不同的Web应用中,使用同一个CAS服务器进

9、行登陆,即可达到单点登陆之目的。将cas-server-321-release.Zp压,找至继续解压它。加解压后的文件夹cas-server-webapp-3.2改名为cas.war为了发布到jboss下方便,tomcat下直接用这个war压缩包就行了),启动jboss服务,测试CAS服务器是否发布正常,可以访问http:/localhost:8080/cas/login出现登陆窗口。输入用户名密码(用户名=密码),出现登陆成功页面说明发布正常。配置jboss服务器使用https协议1、使用Java自带的keytool命令,产生SERVER的证书D:keytool-genkey-aliasmy

10、-alias-name-keyalgRSA-keystorekeystore-file其中my-alias-name为别名,这行命令的作用是产生一个新的公共/私有钥匙对。keystore-file为存储钥匙和证书的文件。命令运行后,根据提示回答。注意在开始问“你的名字”或“DName”的时候,必须填写你服务器所在域名(在局域网中测试时,使用主机名或hosts文件中注册的域名,本机可以使用localhost)。2、到这个目录下去找server.xml文件打开,相应位置更改如下:其中,keystoreFile使用绝对路径或相对路径(如$jboss.server.home.dir/.),keysto

11、rePas为第3点输入的keystore密码。3、配置完成后,启动就jboss访问https:/localhost:8443,访问成功说明SSL配置成功。也可以访问https:/localhost:8443/cas/login配置cas客户端以Tomcat中自带的examples应用为例,在Web应用中使用配置CAS客户端。1、在examples应用里配置CAS客户端,需修改examples/WEB-INF/web.xml,在web.xml文件中,加入如下Filter配置vfilter-nameCASFilter/filter-nameedu.yale.its.tp.cas.client.fi

12、lter.CASFiltervparam-nameedu.yale.its.tp.cas.client.filter.loginUrlhttps:/localhost:8443/cas/loginvparam-nameedu.yale.its.tp.cas.client.filter.validateUrlhttps:/localhost:8443/cas/serviceValidatevparam-nameedu.yale.its.tp.cas.client.filter.serverNamelocalhost:8080v/filtervfilter-mappingvfilter-nameC

13、ASFilterv/filter-namevurl-pattern/*v/url-patternv/filter-mapping其中,第一,二个localhost都改成CAS服务器域名或主机名,第三个改成你serveltexample应用域名或主机名,由于本文中CAS服务器与客户端在同一主机同一Tomcat上,所以都为localhost若不在同一主机,则分别使用两主机的域名或主机名。详细说明如下:表格1.CASFilter必需的参数参数名作用.loginUrl指定CAS提供登录页面的URL.validateUrl指定CAS提供serviceticket或proxyticket证服务的URL验.

14、serverName指定客户端的域名和端口,是指客户端应用所在机器而不是CASServer所在机器,该参数或serviceUrl少有一个必须指定至.serviceUrl该参数指定过后将覆盖serverName参数,成为登录参数名作用.proxyCallbackUrl用于当前应用需要作为其他服务的代理(proxy)时获取ProxyGrantingTicket的地址.authorizedProxy用于允许当前应用从代理处获取proxytickets,该参数接受以空格分隔开的多个proxyURLs,但实际使用只需要一个成功即可。当指定该参数过后,需要修改validateUrl至UproxyValid

15、ate,而不再是serviceValidate.renew如果指定为true,那么受保护的资源每次被访问时均要求用户重新进行验证,而不管之前是否已经通过.wrapRequest如果指定为true,那么CASFilter将重新包装HttpRequest,并且使getRemoteUser()方法返回当前登录用户的用户名.gateway指定gateway属性2、将解压,把java/lib/casclient.jar拷贝到Tomcat的webapps/examples/WEB-INF/lib目录下(如果没有就建一个)3、执行命令行,导出SERVER的证书,用来给所有需要用到的客户端导入D:keytoo

16、l-export-filemyserver.cert-aliasmy-alias-name-keystorekeystore-file4、执行命令行,在客户端的JVM里导入信任的SERVER的证书,(假设你的另外一个应用系统也是用的java,这一步是必须的,否则不能建立两者之间的信任关系。如果不执行下面的命令行,比如在.net环境下可以考虑将生成的myserver.ce作为IE的证书倒入浏览器看看,需要再试一下)D:keytool-import-keystore$JAVA_HOME/jre/lib/security/cacerts-filemyserver.cert-aliasmy-alias

17、-name其中,$JAVA_HOME改成JDK的绝对路径。路径当中如果有空格用双引号括起来。输入keystore密码时,注意现在的keystore为cacerts而cacerts的初密码为changeit而不是前面keystore-file的密码,所以要是没有改过cacerts密码应该输入changeit.测试SSO启动Tomcat禾口jboss,访问http:/localhost:8080/servlets-examples/,随便执行一个servlet,系统会自动跳转到一个验证页面,随便输入一个相同的账号,密码,认证通过之后,就会访问到你点击的servlet了。2.6扩展认证接口及与数据库

18、结合验证CASServer负责完成对用户的认证工作,它会处理登录时的用户凭证(Credentials)信息,用户名/密码对是最常见的凭证信息。CASServer可能需要到数据库检索一条用户帐号信息,也可能在XML文件中检索用户名/密码,还可能通过LDAPServer获取等,在这种情况下,CAS提供了一种灵活但统一的接口和实现分离的方式,实际使用中CAS采用哪种方式认证是与CAS的基本协议分离开的,用户可以根据认证的接口去定制和扩展。261如何做扩展部署扩展AuthenticationHandlerCAS提供扩展认证的核心是AuthenticationHandler接口,具体可查阅源码,看下面一

19、段demo代码,扩展认证方法publicclassUsernameLengthAuthnHandlerextendsAbstractUsernamePasswordAuthenticationHandlerprotectedbooleanauthenticateUsernamePasswordInternal(UsernamePasswordCredentialscredentials)throwsAuthenticationException/*这里我们完全可以用自己的认证逻辑代替,比如将用户名/密码传入一个SQL语句,向数据库验证是否有对应的用户账号,只需要将下面的程序替换掉就OK了!/S

20、tringusername=credentials.getUsername();Stringpassword=credentials.getPassword();StringcorrectPassword=Integer.toString(usernameength();returncorrectPassword.equals(password);完了记得在deployerConfigContext.xm中把这个bean注册一下,就可用了。另外,查看该xml文件发现注册bean时是一个list,如下:在这个list中可以配置多个AuthenticationHandlers这些Authentic

21、ationHandlers形成了一个验证器链,所有提交给CAS的Credentials信息将通过这个验证器链的链式过滤,只要这链中有一个验证器通过了对Credentials的验证,就认为这个Credentials是合法的。这样的设计使得我们可以很轻松的整合不同验证体系的已有应用到同一个CAS上,比如:A验证器负责校验alpha系统提交的Credentials它是基于LDAP服务器的;B验证器负责校验beta系统提交的Credentials它是一个传统的RDB用户表认证;C验证器负责校验gamma系统提交的基于RSA证书加密的Credentials3种完全不同的用户身份认证通过配置就可以统一在同

22、一个CAS服务内JDBC认证方法用户的认证信息通常保存在数据库中,因此本文就选用这种情况来介绍。将前面下载的包解开后,在modules目录下可以找到包其提供了通过JDBC连接数据库进行验证的缺省实现,基于该包的支持,我们只需要做一些配置工作即可实现JDBC认证。JDBC认证方法支持多种数据库,DB2,Oracle,MySql,MicrosoftSQLServer等均可,这里以oracle10作为例子介绍。并且假设oracleSID为:mytest,数据库登录用户名:mytest,数据库登录密码:oracle,用户信息表为:app_use,该表包含用户名和密码的两个数据项分别为userName和

23、password如下:我们测试使用的是oracle数据库,可以选用任何一个支持JDBC的数据库。用scott/tiger登陆sqlplus输入如下语句创建用户表和输入测试数据:createtableapp_user(usernamevarchar(IOO),passwordvarchar(1insertintoapp_uservalues(tomcat,tomcat);insertintoapp_uservalues(cas,cas);commit;打开deployerConfigContext.xm文件,开始配置配置DataStoreoracle.jdbc.driver.OracleDriv

24、erjdbc:oracle:thin:127.0.0.1:1521:mytestmytestoracle配置AuthenticationHandler在包中,提供了3个基于JDBC的AuthenticationHandler,分别为BindModeSearchDatabaseAuthenticationHandlerQueryDatabaseAuthenticationHandler,SearchModeSearchDatabaseAuthenticationHandle其中BindModeSearchDatabaseAuthenticationHandler是用所给的用户名和密码去建立数据库

25、连接,根据连接建立是否成功来判断验证成功与否;QueryDatabaseAuthenticationHandle通过配置一个SQL语句查出密码,与所给密码匹配;SearchModeSearchDatabaseAuthenticationHandler通过配置存放用户验证信息的表、用户名字段和密码字段,构造查询语句来验证。使用哪个AuthenticationHandler,需要在deployerConfigContext.xml中设置,默认情况下,CAS使用一个简单的username二password的AuthenticationHandler(就是第2.5章节所谈到的配置),在文件中可以找到如

26、下一行:vbeanclass二org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler/,我们可以将其注释掉,换成我们希望的一个AuthenticationHandler,比如,使用QueryDatabaseAuthenticationHandler或SearchModeSearchDatabaseAuthenticationHandler可以分别选取下面两个清单的配置使用QueryDatabaseAuthenticationHandlervbeanclass=org

27、.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandlervpropertyname=sqlvalue=selectpasswordfromapp_userwhereusername=?/vpropertyname=dataSourceref=dataSource/使用SearchModeSearchDatabaseAuthenticationHandlerIII;app_useriiiIuserNameIiIpasswordi;1ii另外,由于存放在数据库中的密码通常是加密过的,所以AuthenticationHandler在匹配时

28、需要知道使用的加密方法,在deployerConfigContext.xml文件中我们可以为具体的AuthenticationHandler类配置一个property,指定加密器类,比如对于QueryDatabaseAuthenticationHandler,可以修改所示:添力口passwordEncoder其中myPasswordEncoder是对如下清单中设置的实际加密器类的引用:指定具体加密器类beanid=myPasswordEncoderclass=org.jasig.cas.authentication.handler.MyPasswordEncoder/这里MyPasswordE

29、ncoder是根据实际情况自己定义的加密器,实现PasswordEncoder接口及其encode()方法。熟悉spring的人应该相当对上面的配置感到很亲切,因为CAS3也已经aop,配置都是基于SPRING的方式。4、部署依赖包在以上配置完成以后,需要拷贝几个依赖的包到cas应用下,包括:?将拷贝到CATALINA_HOME%/webapps/cas/WEB-INF/lib目录。?数据库驱动。?DataStore依赖于(如果不采用DBCP连接池,则作相应更换)需要到apache网站的Commons项目下载以上3个包放进%CATALINA_HOME%/webapps/cas/WEB-INF/

30、lib目录。5、再次测试需要验证时输入数据库中存放的用户名和密码即可。如何获取登录的用户名CAS在登录成功过后,会给浏览器回传Cookie,设置新的到的ServiceTicket。但客户端应用拥有各自的Session我们要怎么在各个应用中获取当前登录用户的用户名呢?CASClient的Filter已经做好了处理,在登录成功后,就可以直接从Session的属性中获取:1、在Java中通过Session获取登录用户名/以下两者都可以session.getAttribute(CASFilter.CAS_FILTER_USER);session.getAttribute(edu.yale.its.tp

31、.cas.client.filter.user);2、在JSTL中获取用户名的方法如所示:通过JSTL获取登录用户名3、通过CASFilterRequestWrappe获取登录用户名另外,CAS提供了一个CASFilterRequestWrappe类,该类继承自HttpServletRequestWrapper主要是重写了getRemoteUser()方法,只要在前面配置CASFilter的时候为其设置“”参数为true,就可以通过getRemoteUser()方法来获取登录用户名,具体方法如:CASFilterRequestWrapperreqWrapper=newCASFilterRequestWrapper(request);out.println(Thelogonuser:+reqWrapper.getRemoteUser();3、问题或不足A、由于本人不了解.net,所以.net的客户端配置需要进一步了解,但网上可以找到相关的资料nt/libraries/index.html4、改进意见5、附件A、casserve中的deployerConfigContext.xmliB、casclient配置的web.xml过滤Feb.C、jboos的ssl配置0leLvei.

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!