CAS整合LDAP实现单点登录学习笔记


SJTU Crushing Blow ——CAS 整合 LDAP 实现单点登录学习笔记 Solomon leo solomonleo@gmail.com 8/15/2010 Solomon leo 2010 年 8 月 15 日,七夕前一日。忧来其如何? 凄怆摧心肝。SJTU CAS 整合 LDAP 实现单点登录学习笔记 Page 1 of 19 目录 Contents 目录 ........................................................................................................................................................................................... 1 1 单点登录 ................................................................................................................................................................................ 2 2 CAS .......................................................................................................................................................................................... 3 2.1 JA-SIG(CAS)的设计愿景 ......................................................................................................................................... 3 2.2 CAS1.0 服务架构实现 ................................................................................................................................................. 3 2.3 CAS 服务的具体实现 .................................................................................................................................................. 4 2.4 代理认证 Proxy Authentication .................................................................................................................................. 6 2.5 CAS2.0 代理认证流程 ................................................................................................................................................. 6 2.6 CAS2.0 凭证 ................................................................................................................................................................. 7 3 LDAP ........................................................................................................................................................................................ 8 4 CAS 整合 LDAP 配置过程 ...................................................................................................................................................... 9 4.1 说明 ............................................................................................................................................................................. 9 4.1 LDAP 安装(A) ............................................................................................................................................................... 9 4.2 配置服务器(A) ......................................................................................................................................................... 10 4.3 配置客户端(B,业务服务器) ............................................................................................................................... 15 4.4 关于 CASTestClient 和 cas 的说明 ............................................................................................................................ 16 5 参考目录 .............................................................................................................................................................................. 19 CAS 整合 LDAP 实现单点登录学习笔记 Page 2 of 19 1 单点登录 什么是 SSO(Single Sign On)单点登录? 所谓单点登录是指基于用户/会话认证的一个过程,用户只需一次性提供凭证(仅一次登录),就可以访问多个 应用。 目前单点登录主要基于 Web 的多种应用程序,即通过浏览器实现对多个 B/S 架构应用的统一账户认证。 CAS 整合 LDAP 实现单点登录学习笔记 Page 3 of 19 2 CAS 2.1 JA-SIG(CAS)的设计愿景 CAS(Central Authentication Service – 中心认证服务)的目的就是使分布在一个企业内部各个异构系统的认 证工作集中在一起,通过一个公用的认证系统统一管理和验证用户的身份。在 CAS 上认证的用户将获得 CAS 颁发 的一个证书,使用这个证书,用户可以在承认 CAS 证书的各个系统上自由穿梭访问,不需要再次的登录认证。 打个比方:对于加入欧盟的国家而言,在他们国家中的公民可以凭借着自己的身份证,在整个欧洲旅行,不用 签证。对于企业内部系统而言,CAS 就是这个颁发欧盟认证的系统,其它系统都是加入欧盟的国家,它们要共同遵 守和承认 CAS 的认证规则。 因此 CAS 的设计愿景就是: 1。实现一个易用的、能跨不同 Web 应用的单点登录认证中心; 2。实现统一的用户身份和密钥管理,减少多套密码系统造成的管理成本和安全漏洞; 3。降低认证模块在 IT 系统设计中的耦合度,提供更好的 SOA 设计和更弹性的安全策略 2.2 CAS1.0 服务架构实现 我们以 A 公司的员工日志管理系统为例,如下图: Start 员工solomon打开泓浩 科技系统进入登陆页 系统认证模块接受账 户信息 填写用户名 solomon,密码 WL,提交系统认证 验证失败返回登陆页 面 End 向泓浩科技系统的认 证数据库认证账户信 息 验证成功 系统主界面 数据库 图 2.1 传统的用户认证流程 使用 CAS 后的用户认证流程: CAS 整合 LDAP 实现单点登录学习笔记 Page 4 of 19 员工solomon打开泓浩 科技系统试图进入登 陆页 向系统提交请求 Start 嵌入在系统中的CAS- Client CAS认证过滤器 CAS登录SSO登录页面 获取不到CAS凭证, 将用户重定向到CAS 登陆页 填写用户名 solomon,密码 WL,提交认证中心 CAS认证中心 获取到CAS凭证,向 CAS认证中心校验凭 证 验证失败返回登陆页 面 调用验证器向统一的 认证数据库验证用户 信息 验证成功,重定向到 系统主界面系统主界面 End 用户信息数据 库 图 2.2 使用 CAS 后的用户认证流程 示意图中,CAS 相关部分被标示为蓝色。在这个流程中,员工 solomon 向日志系统请求进入主页面,他的浏 览器发出的 HTTP 请求被嵌入在日志系统中的 CAS 客户端(HTTP 过滤器)拦截,并判断该请求是否带有 CAS 的 证书;如果没有,员工 solomon 将被定位到 CAS 的统一用户登录界面进行登录认证,成功后,CAS 将自动引导 AT 返回日志系统的主页面。 2.3 CAS 服务的具体实现 环境假设:用户 User 要访问业务系统 Woolong;Woolong 系统部署在 WoolongServer 上;CAS 的系统搭建 在服务器 CASserver 上。 CAS 整合 LDAP 实现单点登录学习笔记 Page 5 of 19 Solomon的浏览器 CAS认证服务器 (认证中心) 业务系统Woolong Step1: http://Woolong/index.jsp Step1-R:redicrect https://CASserver/cas/servlet/login?service=http://Woolong/index.jsp Step2: https://CASserver/cas/servlet/login?service=http://Woolong/index.jsp Step2-R:Cookie & Redirect http://Woolong/index.jsp?ticket=casticket Step3: http://Woolong/index.jsp?ticket=casticket Step3-R:如果Step4-R为认证成功,进入到http://Woolong/index.jsp, 否则,Redirect到https://CASserver/cas/servlet/login?service=http://Woolong/index.jsp Step4-R:认证成功/失败 Step4: https://CASserver/cas/servlet/validate?service=http://Woolong/index.jsp&ticket=casticket 图 2.3 CAS 服务的具体实现 图例说明: Step1: 用户第一次访问 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=casticket. 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 所 指向的页面;否则,再次重定向到 https://CASserver/cas/servlet/login?service=http://Woolong/index.jsp 上 要求用户进行认证。 CAS 整合 LDAP 实现单点登录学习笔记 Page 6 of 19 2.4 代理认证 Proxy Authentication 假设有一下这样的应用场景:用户 solomon 早晨来到公司,他的第一件事就是进入泓浩公司的 WooLong 系统 浏览一天的新咨询,如股票信息、天气情况、业界新闻。他通过 CAS 的身份认证登录了门户系统,看到了他订制 的信息。之后,他要访问 WooLong 中的邮件信息,看看有没有新的邮件。这时候 WooLong 系统必须访问他的 IMAP 服务器,这需要他的私人密码。我们知道 WooLong 是通过 CAS 对 solomon 进行认证的,因此 WooLong 上没有 solomon 的个人密码信息。这时,我们发现,WooLong 需要代表 solomon 的身份向 IMAP 服务器提交身份认证, 而这正是 Proxy Authentication 的作用。 2.5 CAS2.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 代理认证请求。 CAS认证服务器 (认证中心) Solomon的浏览器 企业门户的Mail服务 (Services & Proxy) Mail IMAP服务 (Target/Back end service) Step1 请求登陆 Step1-R 返回TGC和ST Step2 使用TGC或者ST登 录门户Mail Step3 验证TGC或者ST Step3-A CallBack 回调链接提交PGT Step1-R 返回TGC和ST Step3-R 返回验证 结果及PGTIOU Step4 请求PT Step4-R 返回solomon 用户对Mail IMAP服务 的PT Step5 使用PT访问 IMAP Step5-A 使用PT验证 proxy身份 Step5-A-R 返回验证结 果 用户ID:solomon 及PGTIOUStep5-B CallBack回调 链接转向MailIMAP提 交PGT使其拥有二级 代理的权利 Step5-R 返回solomon 用户的Mail信息 图 2.4 代理认证流程 其中蓝色线表示 HTTP 或 HTTPS 的请求;红色线表示应答;黑色线表示来自 CAS server 端的回调操作。 CAS 整合 LDAP 实现单点登录学习笔记 Page 7 of 19 2.6 CAS2.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 保存有代理及代理们进行逐级访问 过程的信息。 CAS 整合 LDAP 实现单点登录学习笔记 Page 8 of 19 3 LDAP LDAP 是轻量目录访问协议,英文全称是 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 的支持。 CAS 整合 LDAP 实现单点登录学习笔记 Page 9 of 19 4 CAS 整合 LDAP 配置过程 4.1 说明 A CAS 验证服务器 ip 地址:192.168.1.30 B CAS 客户端,WooLong 业务系统 ip 地址:192.168.1.46 (不再对图进行编号,太累) 4.1 LDAP 安装(A) 如果不使用 LDAP 进行账号存储,此过程可跳过。 安装 LDAP 数据库: 数据库服务器 apacheds-1.5.6-setup 数据库客户端 ApacheDirectoryStudio-win32-1.5.2.v20091211 开启服务 ApacheDirectory 导入 OnlineStore_backup.ldif CAS 整合 LDAP 实现单点登录学习笔记 Page 10 of 19 4.2 配置服务器(A) 配置 host(c 盘下)文件中的域名: 192.168.1.30 casserver CAS 整合 LDAP 实现单点登录学习笔记 Page 11 of 19 安装 tomcat 开启 SSL 使用命令提示符进入到 Tomcat 安装目录 : 1. 生成服务端密匙,执行以下命令 keytool -genkey -alias 别名 keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore 例:keytool -genkey -alias casserver -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore CAS 整合 LDAP 实现单点登录学习笔记 Page 12 of 19 运行后出现提示信息: 您的名字与姓氏是什么? [Unknown]:casserver // 这里一定要填写正确的域名 您的组织单位名称是什么? [Unknown]: test 您的组织名称是什么? [Unknown]: test 您所在的城市或区域名称是什么? [Unknown]:beijing 您所在的州或省份名称是什么? [Unknown]:beijing 该单位的两字母国家代码是什么 [Unknown]: cn CN= 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 changeit 4.拷贝 cacerts 把 cacerts 文件,拷贝到$java_home/jre/lib/security 目录(假定为 D)下 。 备注:如果是以 MyEclipse 开启 Tomcat 服务,这里 D 则为 MyEclipse 的 Tomcat JDK 目录下 jre/lib/security。否则请以 Tomcat 的 JVM 配置为准。 例如,这里如果以 Tomcat 的 JVM 目录为准,则拷贝的目录为: E:\Program Files\Java\jre1.6.0\lib\security (这里的 MyEclipse 中的 TomcatJVM 设置与 Tomcat 本身的 JVM 设置时一致的,但是默认情况是不一致 的,请留意。) CAS 整合 LDAP 实现单点登录学习笔记 Page 13 of 19 CAS 整合 LDAP 实现单点登录学习笔记 Page 14 of 19 4. 修改 Tomcat 的配置文件 server.xml 把以下补注释的内容打开并添加红色部分 导入 cas 拷贝 cas 文件夹到 tomcat webapps(A)目录下,cas 是验证服务器端测试验证程序。 检测 SSL 打开浏览器,输入:https://localhost:8443/cas CAS 整合 LDAP 实现单点登录学习笔记 Page 15 of 19 4.3 配置客户端(B,业务服务器) 配置 host(c 盘下)文件中的域名 192.168.1.30 casserver 192.168.1.46 solomonpc 安装 tomcat 连接服务器 CAS 整合 LDAP 实现单点登录学习笔记 Page 16 of 19 >javac InstallCert.java >java InstallCert.java ldapserver:8443 然后输入 1,确认即可生成 jssecacerts 文件 copy cacerts jssecacerts(InstallCert 生成的)改名为 cacerts copy 到$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 Filter edu.yale.its.tp.cas.client.filter.CASFilter edu.yale.its.tp.cas.client.filter.loginUrl CAS 整合 LDAP 实现单点登录学习笔记 Page 17 of 19 https://casserver:8443/cas/login edu.yale.its.tp.cas.client.filter.validateUrl https:// casserver:8443/cas/serviceValidate edu.yale.its.tp.cas.client.filter.serverName localhost:8080 CAS 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.2\modules 下找到。(此处两个 jar 包在附带的文件下均已存在) 2. 打开目录 Tomcat6\webapps\cas\WEB-INF 找到配置文件“deployerConfigContext.xml”,我们要将 “SimpleTestUsernamePasswordAuthenticationHandler”替换成“FastBindLdapAuthenticationHandler”, 分两步完成: a) 添加一个 contextSource ldap://localhost:10389/ CAS 整合 LDAP 实现单点登录学习笔记 Page 18 of 19 b) 替换掉原有的 Handler CAS 整合 LDAP 实现单点登录学习笔记 Page 19 of 19 5 参考目录 LDAP Authentication Handler(cas 整合 ldap,官方材料,权威,英文比较浅显易懂) https://wiki.jasig.org/display/CASUM/LDAP 使用 CAS 在 Tomcat 中实现单点登录(cas 启蒙,很好的一篇介绍,IBM) http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/index.html JA-SIG(CAS)学习笔记 2(cas 文献和主要逻辑图参考) http://linliangyi2007.javaeye.com/blog/165310 LDAP 百度百科(ldap 文献参考) http://baike.baidu.com/view/159263.htm?fr=ala0_1 Central Authentication Service(CAS)之三(LDAP)(ldap 的支持 jar 包版本与该文章一致) http://blog.csdn.net/arlen_ye/archive/2009/10/13/4665796.aspx CAS 配置(基于 tomcat 6)(包含了登出功能) http://blog.csdn.net/tianlincao/archive/2010/03/13/5376208.aspx 让 CAS 支持客户端自定义登陆页面(cas 进阶,可自定义登录页面) http://hi.baidu.com/fallenlord/blog/item/b031e83e87159cca7c1e7127.html LDAP 与 CAS 单点登录集成(sso 高手,贴代码流,可以在拿不定的时候看看,文字较少) http://hi.baidu.com/five00/blog/category/Ldap/index/1
还剩19页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 20 金币 [ 分享pdf获得金币 ] 5 人已下载

下载pdf

pdf贡献者

chenhb

贡献于2011-08-07

下载需要 20 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf