资源描述
Crushing BlowSJTUCAS整合LDAP实现单点登录学习笔记Solomon leoesse 个个个个个个个个个个个个个个个个个个个个8/15/2010Solomon leo 2010年8月15日,七夕前一日。忧来其如何?凄怆摧心肝。SJTU目录Contents目录11单点登录22 CAS32.1 JA-SIG (CAS)的设计愿景32.2 CAS1.0服务架构实现32.3 CAS服务的具体实现.42.4 代理认证 Proxy Authentication62.5 CAS2.0代理认证流程.62.6 CAS2.0 凭证.73 LDAP84 CAS整合LDAP配置过程.94.1说明94.1LDAP 安装仕)94.2配置服务器(A)104.3配置客户端(B,业务服务器)154.4关于 CASTestClient和 cas 的说明165参考目录191单点登录什么是SSO (Single Sign On)单点登录?所谓单点登录是指基于用户/会话认证的一个过程,用户只需一次性提供凭证(仅一次登录),就可以访问多个 应用。目前单点登录主要基于Web的多种应用程序,即通过浏览器实现对多个B/S架构应用的统一账户认证。2 CAS2.1JA-SIG ( CAS )的设计愿景CAS (Central Authentication Service -中心认证服务)的目的就是使分布在一个企业内部各个异构系统的认 证工作集中在一起,通过一个公用的认证系统统一管理和验证用户的身份。在CAS上认证的用户将获得CAS颁发 的一个证书,使用这个证书,用户可以在承认CAS证书的各个系统上自由穿梭访问,不需要再次的登录认证。打个比方:对于加入欧盟的国家而言,在他们国家中的公民可以凭借着自己的身份证,在整个欧洲旅行,不用 签证。对于企业内部系统而言,CAS就是这个颁发欧盟认证的系统,其它系统都是加入欧盟的国家,它们要共同遵 守和承认CAS的认证规则。因此CAS的设计愿景就是:1。实现一个易用的、能跨不同Web应用的单点登录认证中心;2。实现统一的用户身份和密钥管理,减少多套密码系统造成的管理成本和安全漏洞;3。降低认证模块在IT系统设计中的耦合度,提供更好的SOA设计和更弹性的安全策略2.2CAS10服务架构实现我们以A公司的员工日志管理系统为例,如下图:图2.1传统的用户认证流程使用CAS后的用户认证流程:员工solomon打开泓浩 科技系统试图进入登 陆页向系统提交请求CAS登录SSO登录页面填写用户名 solomon,密码CAS认证中心用户信息数据 库.图2.2使用CAS后的用户认证流程示意图中,CAS相关部分被标示为蓝色。在这个流程中,员工solomon向日志系统请求进入主页面,他的浏 览器发出的HTTP请求被嵌入在日志系统中的CAS客户端(HTTP过滤器)拦截,并判断该请求是否带有CAS的 证书;如果没有,员工solomon将被定位到CAS的统一用户登录界面进行登录认证,成功后,CAS将自动引导 AT返回日志系统的主页面。2.3CAS服务的具体实现环境假设:用户User要访问业务系统Woolong; Woolong系统部署在WoolongServer上;CAS的系统搭建 在服务器CASserver上。Stepl:用户第一次访问 Woolong 系统主页 http:/Woolong/index.jsp;部署在Woolong系统上的CASFilter发现用户尚未登录,将用户重定向的CAS登录界面:https:/CASserver/cas/servlet/login?service=http:/Woolong/index.jsp同时在重定向的URL上用service参数将用户的目标地址传给CAS服务器。Step2:用户在CAS的登录页上输入用户名密码登录,CAS服务器认证通过后,生成一个ticket,并带在目标 地址的尾部返回客户端的浏览器 redirect: http:/Woolong/index.jsp?ticket=casticke.Step3:客户端浏览器获得CAS服务器的认证应答,取得凭证ticket后,使用重定向的链接 http:/Woolong/index.jsp?ticket=casticket 访问 Woolong 服务Step4: WoolongServer上的CASFilter再次过滤访问请求,并获得ticket凭证。Filter将使用该凭证通过URL https:/CASserver/cas/servlet/validate?service=http:/Woolong/index.jsp&ticket=casticket 向 CAS 认证中心 确认对应的服务请求和凭证是否有效。根据CAS服务器返回的结果,如果凭证有效,则CASFilter允许用户进入http:/Woolong/index.jsp所 指向的页面;否则,再次重定向至U https:/CASserver/cas/servlet/login?service=http:/Woolong/index.jsp 上 要求用户进行认证。2.4 代理认证 ProxyAuthentication假设有一下这样的应用场景:用户solomon早晨来到公司,他的第一件事就是进入泓浩公司的WooLong系统 浏览一天的新咨询,如股票信息、天气情况、业界新闻。他通过CAS的身份认证登录了门户系统,看到了他订制 的信息。之后,他要访问WooLong中的邮件信息,看看有没有新的邮件。这时候WooLong系统必须访问他的IMAP 服务器,这需要他的私人密码。我们知道WooLong是通过CAS对solomon进行认证的,因此WooLong上没有 solomon的个人密码信息。这时,我们发现,WooLong需要代表solomon的身份向IMAP服务器提交身份认证, 而这正是Proxy Authentication的作用。2.5CAS2.0代理认证流程以下的流程图模拟上述的用户solomon通过WooLong向他的IMAP邮件服务器请求电子邮件的认证过程。在 该过程中,充当Service和Proxy两个角色的WooLong使用CAS Filter对访问其自身的用户进行CAS认证;同时 WooLong 要使用 ProxyTicketReceptor servlet 接收来自 CAS server 的 PGT 信息,并使用 ProxyTicketValidator 对象向CAS获取访问IMAP服务器的Proxy Ticket凭证;最终从IMAP服务器上获取solomon用户的mail信息。 同样的,这里的IMAP服务器也要接受并认可CAS对其用户的认证管理,同时它自己也成为二级Proxy,在有需要 的情况下,一样可以向它的back-end Service发起Proxy Authentication代理认证请求。其中蓝色线表示HTTP或HTTPS的请求;红色线表示应答;黑色线表示来自CAS server端的回调操作。2.6CAS2.0 凭证在CAS系统中,各方通过凭证(Ticket)对用户身份进行验证。CAS系统中设计了 5种凭证:TGC、ST、PGT、 PGTIOU、PT。TGC(Ticket-Granting Cookie):存放用户身份认证凭证的cookie,在浏览器和CAS间通讯时使用,并且只能基 于安全通道传输,是CAS用来明确用户身份的凭证;ST(Service Ticket):服务的惟一标识码。由CAS Server发出,通过客户端浏览器到达业务服务器端。一个特定 的服务只能有一个惟一的ST;PGT(Proxy-Granting ticket):由CAS Server颁发给拥有ST凭证的服务。PGT绑定一个用户的特定服务,使其 拥有向CAS Server申请,获得PT的能力;PGTIOU(Proxy-Granting Ticket IOU):作用是将通过凭证校验时的应答信息由CAS Server返回给CAS Client, 同时,与该GTIOU对应的PGT将通过回调链接传给Web应用。Web应用负责维护PGTIOU与PGT之间映射关 系的内容表;PT(Proxy Ticket):是应用程序代理用户身份对目标程序进行访问的凭证。PT保存有代理及代理们进行逐级访问 过程的信息。3 LDAPLDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol, 一般都简称为LDAP。它基 于X.500标准,并可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。简单说来,LDAP是一个得到关于人或者资源的集中、静态数据的快速方式。LDAP与关系数据库相似,是具有描述性的基于属性的记录集合,但它的数据类型主要是字符型,为了检索的 需要添加了 BIN (二进制数据)、CIS (忽略大小写)、CES (大小写敏感)、TEL (电话型)等语法(Syntax),而 不是关系数据库提供的整数、浮点数、日期、货币等类型,同样也不提供象关系数据库中普遍包含的大量的函数, 它主要面向数据的查询服务(查询和修改操作比一般是大于10:1),不提供事务的回滚(rollback)机制,它的数据 修改使用简单的锁定机制实现All-or-Nothing,它的目标是快速响应和大容量查询并且提供多目录服务器的信息复 制功能。LDAP最大的优势是:可以在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访 问LDAP目录。而且也很容易定制应用程序为它加上LDAP的支持。4 CAS整合LDAP配置过程4.1说明ACAS验证服务器ip 地址:192.168.1.30BCAS客户端,WooLong业务系统 ip 地址:192.168.1.46(不再对图进行编号,太累)4.1LDAP 安装(A)如果不使用LDAP进行账号存储,此过程可跳过。安装LDAP数据库:数据库服务器apacheds-1.5.6-setup数据库客户端ApacheDirectoryStudio-win32-1.5.2.v20091211ApadieDir ectory Studio-win 3 Z-.apadieds-1.5.6-setup开启服务 ApacheDirectoryApache Directory Senrer default5to口 the serviceRjestart the EErviceApache To.ProvideE a.StatusStar tedLdesI EystfimLdcsI SerwoeName ?械,NETRLTstime s此mizmton Service v2.D.5D727_. AlerterDdscripUoncrasaft:.NotifieE seJ.Startup TypehnualDi gabledhnualhnualLag On AsLdesI EystfimLdcsI Serwoe嗥 Services (Local)盟女阮 Dir,” Started 如1珈祯匚 LoE Sygienitea die Directory Setvet - default导入 OnlineStore_backup.ldif4.2配置服务器(A)配置host (c盘下)文件中的域名:192.168.1.30 casserver片&t口回区1Fie EdtView FavDritsaTcda HelpBack ,质SeardiFoldersddreEE tZJ C;WD/SfeteViriversetcl-il and l-oldlcr Tasks了JI Make a rew ftilda-0 Publish the folder ia the webg Share ths fhld&rFileOther PlacoEdiversMy DoiLimentEShared DocurreitEMy Conpuler0ng卷丽SAFB FileJaeImhostsSAM File4 KBMr Hehvork Places host - Notepad12回区File Edit Format View Help192.168.1.30 ca&server 127,0.0,1 localhost安装tomcat开启SSL使用命令提示符进入到Tomcat安装目录:1. 生成服务端密匙,执行以下命令keytool -genkey -alias 另 1|名 keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore例: keytool -genkey -alias casserver -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystoreC:l1/!NDOWSsyt&m32md.cxe - keyloal -genkey -ulias casserver -keyalg RSA -keypass- Eihangjeit -stnrepass cha.n_. 旧Microsoft; Windows HP LUcr-ian 1.26OO1 Copyright 1905-2001 mcroDft Corp.C:sJJocuneiiits and SettingsSsolonnonEtDol -geinkey1 -alias Gasserver -keyaliff RSA kEWs changieit stoe SBFuei.legistare 陶的名字与姓氏是什么?运行后出现提示信息:您的名字与姓氏是什么?Unknown: casserver /这里一定要填写正确的域名您的组织单位名称是什么?Unknown: test您的组织名称是什么?Unknown: test您所在的城市或区域名称是什么?Unknown: beijing您所在的州或省份名称是什么?Unknown: beijing该单位的两字母国家代码是什么Unknown: cnCN= casserver, OU= test, O= test, L= beijing, ST= beijing, C=cn 正确吗? Y完成后会在Tomcat目录生成一个名为server.keystore的文件2. 生成服务端证书,执行以下命令keytool -export -alias casserver -storepass changeit -file server.cer-keystore server.keystore命令执行后生成一个server.cer的证书文件3. 导入证书文件到cacerts文件中,执行以下命令keytool -import -trustcacerts -alias server -file server.cer -keystore cacerts -storepass changeit4. 拷贝 cacerts把 cacerts 文件,拷贝到$java_home/jre/lib/security 目录(假定为 D)下。备注:如果是以MyEclipse开启Tomcat服务,这里D则为MyEclipse的Tomcat JDK目录下 jre/lib/security。否则请以Tomcat的JVM配置为准。例如,这里如果以Tomcat的JVM目录为准,则拷贝的目录为:E:Program FilesJavajre1.6.0libsecurity(这里的MyEclipse中的TomcatJVM设置与Tomcat本身的JVM设置时一致的,但是默认情况是不一致 的,请留意。)* Apdthe Tomcat 6 PropertiesGenei al Log On Logging Java startup Sliuldo物iJava Virtual Mschne:E:program FjlesyavaXi 16.OjndienL)Min.dllJava Ooticns:K i Cancel,PreferencesPHEtype filter textB NyBdipsej 0- AJAXr Configuration CenterE- Database Explorer0 Ties and Edtorsenensl|j- ntsrret Tools) Java Enterprise Projec viaasse4MyEdiDse/SwE- MavenyEdipse Profiler Project Capablities Report Design0- ServersFFl- Geronimo- Glassfiish Integrated Sandbc(J- JBoss由 Jetty- JOnASE- JRun Grade- Orion田 Resin- SpringSourceFFl- Sun Jara System /- Sun System E) Tomcat& Tomcat Txlil -Tomcat 5.x:!白 Tomcat 6.xJDK( Tsnozat JDK name:je 1.6.0v* Add.Cptbnal Java VM arguments:Notes1. JDK Vrixal Machine muEt spezify a RjI JDK hEtallaticn. Specifying a JRE will result in an startup excepbon.2, Avoid use of the -cpr -dasspathr or -Djava,library, pa th JW options, Consult the ClasspaUi pace for proper path anfiguratiDn,JDKLaunch s Paths 顼 Restore DefaultsAP0OKCancel4.修改Tomcat的配置文件server.xml把以下补注释的内容打开并添加红色部分 导入cas拷贝cas文件夹到tomcat webapps(A)目录下,cas是验证服务器端测试验证程序。检测SSL打开浏览器,输入:https:/localhost:8443/cas4.3配置客户端(B,业务服务器)配置host(c盘下)文件中的域名192.168.1.30 casserver192.168.1.46 solomonpc安装tomcat连接服务器CAWINDOWS5ysterri32crnd.exehicrosoft Vindous XF Version 5.1.26B01CO CopiiiFight 19852001 MieyosaiFt Corp-C5 Mkicuincri ts and Sett in M: o lo non B sD: Javac I nstallCcrt. jcivaDjava JnstallCert casserye=8443Mjavac InstallCert.javajava InstallCert.java ldapserver:8443然后输入1,确认即可生成jssecacerts文件copy cacertsjssecacerts(InstallCert 生成的)改名为 cacertscopy到$java_home/jre/lib/security目录下(这里目标目录原则和cas验证服务器端相同)导入 CASTestClient拷贝 CASTestClient文件夹到 tomcat webapps(B)目录下检测单点登录打开浏览器,输入:http:/localhost:8080/CASTestClient此时,客户端重定向到cas验证服务器端登录界面, 一旦完成验证,则重定向到 WooLong业务系统主页。不关闭浏览器,打开新标签输入 http:/localhost:8080/CASTestClient则无需验证,直接到达WooLong业务系统主页。4.4 关于 CASTestClient 和 cas 的说明cas是验证服务器的最简单的验证服务,用户名和密码一样时即可通过验证。CASTestClient是一个简单的web应用,主要需要对其web.xml加入CAS Filter。CAS Filteredu.yale.its.tp.cas.client.filter.CASFilteredu.yale.its.tp.cas.client.filter.loginUrlhttps:/casserver:8443/cas/loginedu.yale.its.tp.cas.client.filter.validateUrlhttps:/ casserver:8443/cas/serviceValidateedu.yale.its.tp.cas.client.filter.serverNamelocalhost:8080CAS Filter/*如果想用ldap的数据进行账号验证,则需要在验证服务器的cas应用中加上一定的修改。修改步骤如下:1. 添加“spring-ldap-1.3.0.RELEASE-all.jar”可以在spring的官方网站上找到,添加“ cas-server-support-ldap-3.3.2.jar”可以在 cas 官网下载的 cas-server-3.3.2 目录 cas-server-3.3.2modules下找到。(此处两个jar包在附带的文件下均已存在2. 打开目录 Tomcat6webappscasWEB-INF 找到配置文件“deployerConfigContext.xml”,我们要将 “SimpleTestUsernamePasswordAuthenticationHandler” 替 换成 “FastBindLdapAuthenticationHandler”, 分两步完成:a)添加一个 contextSourceldap:/localhost:10389/b)替换掉原有的Handler5参考目录LDAP Authentication Handler (cas整合Idap,官方材料,权威,英文比较浅显易懂) https:/wiki.jasig.org/display/CASUM/LDAP使用CAS在Tomcat中实现单点登录(cas启蒙,很好的一篇介绍,IBM)JA-SIG(CAS)学习笔记2(cas文献和主要逻辑图参考)LDAP百度百科(ldap文献参考) 1Central Authentication Service(CAS)之三(LDAP)(ldap 的支持 jar 包版本与该文章一致) ye/archive/2009/10/13/4665796.aspxCAS配置(基于tomcat 6)(包含了登出功能)让CAS支持客户端自定义登陆页面(cas进阶,可自定义登录页面)LDAP与CAS单点登录集成(sso高手,贴代码流,可以在拿不定的时候看看,文字较少)
展开阅读全文