三峡大学统一身份认证平台接口文档目录1.统一身份认证简介 (3)1.1 背景知识 (3)1.1.1 什么是单点登录(Single Sign On): (3)1.1.2 中心认证服务的设计愿景: (3)1.2 CAS的实现 (4)系统中的用到的凭证(ticket): (5)2.JAVA语言 (6)2.1 CAS简单登陆的实现 (6)2.2 CAS登出 (12)3.PHP语言 (13)3.1 CAS单点登录测试环境搭建步骤 (13)3.1.1 获取必要的驱动程序: (13)3.1.2 搭建php运行环境 (13)3.1.3 配置PHP cas 客户端测试程序 (13)3.2 PHP-CAS客户端 (14)3.2.1 cas-client的初始化 (14)3.2.2 设置不是SSL的CAS认证 (16)3.2.3 进行CAS认证 (17)3.2.4 登出 (20)语言 (22)4.1 搭建环境 (22)4.2 CAS简单登陆实现 (22)4.3 CAS登出实现 (23)5.ASP语言 (24)5.1 CAS简单登录实现 (24)5.2 CAS登出实现 (25)6.附录 (26)6.1 附录1 (26)6.2 附录2 (28)6.3 附录3 (30)6.4 附录4 (31)6.5 附录5 (32)1.统一身份认证简介1.1背景知识1.1.1 什么是单点登录(Single Sign On):所谓单点登录是指基于用户/会话认证的一个过程,用户只需一次性提供凭证(仅一次登录),就可以访问多个应用。
目前单点登录主要基于Web的多种应用程序,即通过浏览器实现对多个B/S架构应用的统一账户认证。
1.1.2 中心认证服务的设计愿景:简单的说,中心认证服务(Central Authentication Service 缩写:CAS)的目的就是使分布在一个企业内部各个不同异构系统的认证工作集中在一起,通过一个公用的认证系统统一管理和验证用户的身份,一般我们称之为统一身份认证平台。
在CAS上认证的用户将获得CAS颁发的一个证书,使用这个证书,用户可以在承认CAS 证书的各个系统上自由穿梭访问,不需要再次的登录认证。
打个比方:对于加入欧盟的国家而言,在他们国家中的公民可以凭借着自己的身份证,在整个欧洲旅行,不用签证。
对于学校内部系统而言,CAS就好比这个颁发欧盟认证的系统,其它系统都是加入欧盟的国家,它们要共同遵守和承认CAS的认证规则。
因此CAS的设计愿望就是:➢实现一个易用的、能跨不同Web应用的单点登录认证中心;➢实现统一的用户身份和密钥管理,减少多套密码系统造成的管理成本和安全漏洞;➢降低认证模块在IT系统设计中的耦合度,提供更好的SOA设计和更弹性的安全策略。
1.2CAS的实现从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。
CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。
图1 是 CAS 最基本的协议过程:CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。
对于访问受保护资源的每个 Web 请求,CAS Client 会分析该请求的 Http 请求中是否包含Service Ticket,如果没有,则说明当前用户尚未登录,于是将请求重定向到指定好的 CAS Server 登录地址,并传递 Service (也就是要访问的目的资源地址),以便登录成功过后转回该地址。
用户在第 3 步中输入认证信息,如果登录成功,CAS Server 随机产生一个相当长度、唯一、不可伪造的 Service Ticket,并缓存以待将来验证,之后系统自动重定向到 Service 所在地址,并为客户端浏览器设置一个 Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新产生的 Ticket 过后,在第 5,6 步中与 CAS Server 进行身份合适,以确保 Service Ticket 的合法性。
在该协议中,所有与 CAS 的交互均采用 SSL 协议,确保,ST 和 TGC 的安全性。
协议工作过程中会有 2 次重定向的过程,但是 CAS Client 与 CAS Server 之间进行 Ticket 验证的过程对于用户是透明的。
另外,CAS 协议中还提供了 Proxy (代理)模式,以适应更加高级、复杂的应用场景,具体介绍可以参考 CAS 官方网站上的相关文档。
系统中的用到的凭证(ticket):Ticket-granting cookie(TGC) 凭证存放cookie它是存放用户身份认证凭证的cookie,在浏览器和CAS间通讯时使用,并且只能基于安全通道HTTPS。
它是CAS用来明确用户身份的凭证,是实现web系统SSO的可选方案之一。
Service ticket(ST) 服务许可证Service ticket凭证由CAS服务器发出,通过客户端浏览器,到达业务服务器(通过URL重定向和ticket参数来实现)。
每个ST只能使用一次,针对特定的服务生成唯一识别码。
Proxy-granting ticket(PGT) 代理授权许可证该许可证由CAS服务器颁发给拥有ST凭证的服务(如果一个服务自身没有获得ST凭证,是不可能获得PGT的)。
该许可证绑定一个用户的一个特定服务,使其拥有向CAS服务器申请,以获得“代理凭证Proxy-tickets”的能力。
Proxy-granting ticket IOU(PGTIOU) 代理授权许可证索引这个许可证索引将通过凭证校验时的应答信息由CAS服务器端返回给CAS客户端。
与此同时,与该索引对应的PGT将通过回调链接传给web应用。
Web应用必须维护着PGT索引和PGT之间映射关系的内存表。
Proxy ticket(PT)代理许可证是应用程序代理用户身份,对目标程序进行访问的凭证。
代理许可证保存有代理及代理们进行逐级访问过程的信息。
一个代理访问的有可能是另一个更高级的代理,因此PT可以用来获取下一级代理的PGT。
这些逐级生成的PGT将保存有从用户到最终目标之间的代理队列的完整信息。
后面的章节将介绍常用的几种语言编写的程序,如何如何集成到统一身份认证中心平台。
如果将来学校还有其他语言的系统需要集成到统一身份认证中心平台,请联系公司索取相应的实现方法。
2.JAVA语言2.1CAS简单登陆的实现假设 CAS Server 单独部署在一台机器 A,而客户端应用部署在机器 B 上,由于客户端应用与 CAS Server 的通信采用 SSL,因此,需要在 A 与 B 的 JRE 之间建立信任关系。
首先与 A 机器一样,要生成 B 机器上的证书,配置应用服务器的 SSL 协议。
其次,下载/andreas/entry/no_more_unable_to_find 的InstallCert.java,运行“ java InstallCert compA:7002 ”命令,并且在接下来出现的询问中输入1。
这样,就将 A 添加到了 B 的 truststore 中。
如果多个客户端应用分别部署在不同机器上,那么每个机器都需要与 CAS Server 所在机器建立信任关系。
◆配置 CAS Filter准备好应用 casTest1 和 casTest2 过后,分别部署在 B 和 C 机器上,由于 casTest1 和casTest2,B 和 C 完全等同,我们以 casTest1 在 B 机器上的配置做介绍,假设 A 和B 的域名分别为 domainA 和 domainB。
将cas-client-java-2.1.1.jar 并拷贝到 casTest1/WEB-INF/lib目录下,修改web.xml 文件,添加 CAS Filter,如清单 10 所示:◆添加 CAS Filter对于所有访问满足 casTest1/protected-pattern/ 路径的资源时,都要求到 CASServer 登录,如果需要整个 casTest1 均受保护,可以将 url-pattern 指定为“/*”。
从以上配置可以看到,我们可以为 CASFilter 指定一些参数,并且有些是必须的,表格 1 和表格 2 中分别是必需和可选的参数:表格 1. CASFilter 必需的参数参数名作用edu.yale.its.tp.cas.client.filter.loginUrl 指定 CAS 提供登录页面的 URL edu.yale.its.tp.cas.client.filter.validateUrl 指定 CAS 提供 service ticket或 proxy ticket 验证服务的URLedu.yale.its.tp.cas.client.filter.serverName 指定客户端的域名和端口,是指客户端应用所在机器而不是 CASServer 所在机器,该参数或serviceUrl 至少有一个必须指定edu.yale.its.tp.cas.client.filter.serviceUrl 该参数指定过后将覆盖serverName 参数,成为登录成功过后重定向的目的地址表格 2. CASFilter 可选参数参数名作用edu.yale.its.tp.cas.client.filter.proxyCallbackUrl 用于当前应用需要作为其他服务的代理(proxy)时获取 ProxyGranting Ticket 的地址edu.yale.its.tp.cas.client.filter.authorizedProxy 用于允许当前应用从代理处获取proxy tickets,该参数接受以空格分隔开的多个 proxy URLs,但实际使用只需要一个成功即可。
当指定该参数过后,需要修改validateUrl 到 proxyValidate,而不再是 serviceValidate edu.yale.its.tp.cas.client.filter.renew 如果指定为 true,那么受保护的资源每次被访问时均要求用户重新进行验证,而不管之前是否已经通过edu.yale.its.tp.cas.client.filter.wrapRequest 如果指定为 true,那么CASFilter 将重新包装HttpRequest,并且使getRemoteUser() 方法返回当前登录用户的用户名edu.yale.its.tp.cas.client.filter.gateway 指定 gateway 属性传递登录用户名CAS 在登录成功过后,会给浏览器回传 Cookie,设置新的到的 Service Ticket。