版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、三峡大学统一身份认证平台接口文档目录1.统一身份认证简介31.1背景知识31.1.1 什么是单点登录(Single Sign On):31.1.2 中心认证服务的设计愿景:31.2CAS的实现4系统中的用到的凭证(ticket):52.JAVA语言62.1CAS简单登陆的实现62.2CAS登出123.PHP语言133.1CAS单点登录测试环境搭建步骤133.1.1获取必要的驱动程序:133.1.2搭建php运行环境133.1.3配置PHP cas 客户端测试程序133.2PHP-CAS客户端143.2.1cas-client的初始化143.2.2设置不是SSL的CAS认证163.2.3进行CA
2、S认证173.2.4登出204.ASP.NET语言224.1搭建ASP.NET环境224.2CAS简单登陆实现224.3CAS登出实现235.ASP语言245.1CAS简单登录实现245.2CAS登出实现256.附录266.1附录1266.2附录2286.3附录3306.4附录4316.5附录5321. 统一身份认证简介1.1 背景知识1.1.1 什么是单点登录(Single Sign On):所谓单点登录是指基于用户/会话认证的一个过程,用户只需一次性提供凭证(仅一次登录),就可以访问多个应用。目前单点登录主要基于Web的多种应用程序,即通过浏览器实现对多个B/S架构应用的统一账户认证。1.
3、1.2 中心认证服务的设计愿景:简单的说,中心认证服务(Central Authentication Service 缩写:CAS)的目的就是使分布在一个企业内部各个不同异构系统的认证工作集中在一起,通过一个公用的认证系统统一管理和验证用户的身份,一般我们称之为统一身份认证平台。在CAS上认证的用户将获得CAS颁发的一个证书,使用这个证书,用户可以在承认CAS证书的各个系统上自由穿梭访问,不需要再次的登录认证。打个比方:对于加入欧盟的国家而言,在他们国家中的公民可以凭借着自己的身份证,在整个欧洲旅行,不用签证。对于学校内部系统而言,CAS就好比这个颁发欧盟认证的系统,其它系统都是加入欧盟的国家
4、,它们要共同遵守和承认CAS的认证规则。因此CAS的设计愿望就是:Ø 实现一个易用的、能跨不同Web应用的单点登录认证中心;Ø 实现统一的用户身份和密钥管理,减少多套密码系统造成的管理成本和安全漏洞;Ø 降低认证模块在IT系统设计中的耦合度,提供更好的SOA设计和更弹性的安全策略。1.2 CAS的实现从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。图1 是 CAS
5、最基本的协议过程:CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。对于访问受保护资源的每个 Web 请求,CAS Client 会分析该请求的 Http 请求中是否包含 Service Ticket,如果没有,则说明当前用户尚未登录,于是将请求重定向到指定好的 CAS Server 登录地址,并传递 Service (也就是要访问的目的资源地址),以便登录成功过后转回该地址。用户在第 3 步中输入认证信息,如果登录成功,CAS Server 随机产生一个相当长度、唯一、不可伪造的 Service Ticket,并缓存以待将来验证,之后系统自动重定向
6、到 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 (代理)模式,以适应更加高级
7、、复杂的应用场景,具体介绍可以参考 CAS 官方网站上的相关文档。 系统中的用到的凭证(ticket):Ticket-granting cookie(TGC) 凭证存放cookie它是存放用户身份认证凭证的cookie,在浏览器和CAS间通讯时使用,并且只能基于安全通道HTTPS。它是CAS用来明确用户身份的凭证,是实现web系统SSO的可选方案之一。Service ticket(ST) 服务许可证Service ticket凭证由CAS服务器发出,通过客户端浏览器,到达业务服务器(通过URL重定向和ticket参数来实现)。每个ST只能使用一次,针对特定的服务生成唯一识别码。Proxy-gr
8、anting ticket(PGT) 代理授权许可证该许可证由CAS服务器颁发给拥有ST凭证的服务(如果一个服务自身没有获得ST凭证,是不可能获得PGT的)。该许可证绑定一个用户的一个特定服务,使其拥有向CAS服务器申请,以获得“代理凭证Proxy-tickets”的能力。Proxy-granting ticket IOU(PGTIOU) 代理授权许可证索引这个许可证索引将通过凭证校验时的应答信息由CAS服务器端返回给CAS客户端。与此同时,与该索引对应的PGT将通过回调链接传给web应用。Web应用必须维护着PGT索引和PGT之间映射关系的内存表。Proxy ticket(PT)代理许可证是
9、应用程序代理用户身份,对目标程序进行访问的凭证。代理许可证保存有代理及代理们进行逐级访问过程的信息。一个代理访问的有可能是另一个更高级的代理,因此PT可以用来获取下一级代理的PGT。这些逐级生成的PGT将保存有从用户到最终目标之间的代理队列的完整信息。后面的章节将介绍常用的几种语言编写的程序,如何如何集成到统一身份认证中心平台。如果将来学校还有其他语言的系统需要集成到统一身份认证中心平台,请联系公司索取相应的实现方法。2. JAVA语言2.1 CAS简单登陆的实现假设 CAS Server 单独部署在一台机器 A,而客户端应用部署在机器 B 上,由于客户端应用与 CAS Server 的通信采
10、用 SSL,因此,需要在 A 与 B 的 JRE 之间建立信任关系。首先与 A 机器一样,要生成 B 机器上的证书,配置应用服务器的 SSL 协议。其次,下载 的 InstallCert.java,运行“ java InstallCert compA:7002 ”命令,并且在接下来出现的询问中输入1。这样,就将 A 添加到了 B 的 truststore 中。如果多个客户端应用分别部署在不同机器上,那么每个机器都需要与 CAS Server 所在机器建立信任关系。u 配置 CAS Filter准备好应用 casTest1 和 casTest2 过后,分别部署在 B 和 C 机器上,由于 cas
11、Test1 和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 所示:u 添加 CAS Filter<web-app> . <filter> <filter-name>CAS Filter</filter-name> <filter-class>
12、edu.yale.its.tp.cas.client.filter.CASFilter</filter-class> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name> <param-value>https:/domainA:8443/cas/login</param-value> </init-param> <init-param> <param-name>edu.yale.i
13、ts.tp.cas.client.filter.validateUrl</param-name> <param-value>https:/domainA:8443/cas/serviceValidate</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name> <param-value>domainB:8080</param-val
14、ue> </init-param> </filter> <filter-mapping> <filter-name>CAS Filter</filter-name> <url-pattern>/protected-pattern/*</url-pattern> </filter-mapping> .</web-app>对于所有访问满足 casTest1/protected-pattern/ 路径的资源时,都要求到 CAS Server 登录,如果需要整个 casTest1 均受保护
15、,可以将 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 验证服务的 URL edu.yale.its.tp.cas.cli
16、ent.filter.serverName 指定客户端的域名和端口,是指客户端应用所在机器而不是 CAS Server 所在机器,该参数或 serviceUrl 至少有一个必须指定 edu.yale.its.tp.cas.client.filter.serviceUrl 该参数指定过后将覆盖 serverName 参数,成为登录成功过后重定向的目的地址 表格 2. CASFilter 可选参数参数名 作用 xyCallbackUrl 用于当前应用需要作为其他服务的代理(proxy)时获取 Proxy Granting T
17、icket 的地址 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.ca
18、s.client.filter.wrapRequest 如果指定为 true,那么 CASFilter 将重新包装 HttpRequest,并且使 getRemoteUser() 方法返回当前登录用户的用户名 edu.yale.its.tp.cas.client.filter.gateway 指定 gateway 属性 u 传递登录用户名CAS 在登录成功过后,会给浏览器回传 Cookie,设置新的到的 Service Ticket。但客户端应用拥有各自的 Session,我们要怎么在各个应用中获取当前登录用户的用户名呢?CAS Client 的 Filter 已经做好了处理,在登录成功后,就
19、可以直接从 Session 的属性中获取,如下所示:在 Java 中通过 Session 获取登录用户名: / 以下两者都可以session.getAttribute(CASFilter.CAS_FILTER_USER);session.getAttribute("edu.yale.its.tp.cas.client.filter.user");通过 JSTL 获取登录用户名: <c:out value="$sessionScopeCAS:'edu.yale.its.tp.cas.client.filter.user'"/>另
20、外,CAS 提供了一个 CASFilterRequestWrapper 类,该类继承自HttpServletReque stWrapper,主要是重写了 getRemoteUser() 方法,只要在前面配置 CASFilter 的时候为其设置“ edu.yale.its.tp.cas.client.filter.wrapRequest ”参数为 true,就可以通过 getRemoteUser() 方法来获取登录用户名,具体方法如下所示:通过 CASFilterRequestWrapper 获取登录用户名: CASFilterRequestWrapper reqWrapper=new CASF
21、ilterRequestWrapper(request);out.println("The logon user:" + reqWrapper.getRemoteUser();u 测试效果在 casTest1 和 casTest2 中,都有一个简单 Servlet 作为欢迎页面 WelcomPage,且该页面必须登录过后才能访问,页面代码如下所示:WelcomePage 页面代码:public class WelcomePage extends HttpServlet public void doGet(HttpServletRequest request, HttpSer
22、vletResponse response) throws IOException, ServletException response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Welcome to casTest2 sample System!</titl
23、e>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Welcome to casTest1 sample System!</h1>"); CASFilterRequestWrapper reqWrapper=new CASFilterRequestWrapper(request); out.println("<p>The logon user:" + r
24、eqWrapper.getRemoteUser() + "</p>"); HttpSession session=request.getSession(); out.println("<p>The logon user:" + session.getAttribute(CASFilter.CAS_FILTER_USER) + "</p>"); out.println("<p>The logon user:" + session.getAttribute("e
25、du.yale.its.tp.cas.client.filter.user") + "</p>"); out.println("</body>"); out.println("</html>"); 在上面所有配置结束过后,分别在 A, B, C上启动 cas, casTest1 和 casTest2,按照下面步骤来访问 casTest1 和 casTest2:Ø 打开浏览器,访问 http:/domainB:8080/casTest1/WelcomePage ,浏览器会弹出安全提
26、示,接受后即转到 CAS 的登录页面:Ø 登录成功后,再重定向到 casTest1 的 WelcomePage 页面登录后访问 casTest1 的效果:可以看到图中地址栏里的地址多出了一个 ticket 参数,这就是 CAS 分配给当前应用的 ST(Service Ticket)。再在同一个浏览器的地址栏中输入 http:/domainC:8080/casTest2/WelcomePage ,系统不再提示用户登录,而直接出现如下图 所示的页面,并且显示在 casTest1 中已经登录过的用户:在 casTest1 中登录过后访问 casTest2 的效果:重新打开一个浏览器窗口,先
27、输入 http:/domainC:8080/casTest2/WelcomePage ,系统要求登录,在登录成功过后,正确显示 casTest2 的页面。之后再在地址栏重新输入 http:/domainB:8080/casTest1/WelcomePage ,会直接显示 casTest1 的页面而无需再次登录。 2.2 CAS登出在业务系统的logout模块中将logout链接的URL改成CAS服务器的logout接口即可。代码如下:Response.Redirect(“:7002/cas/logout”);3. PHP语言3.1 CAS单点登录测试环境搭建步骤3.1.1 获取必要的驱动程序:
28、首先,我们要拿到为PHP语言准备的CAS的客户端驱动程序:CAS-1.0.1.tgz。3.1.2 搭建php运行环境 3.1.3 配置PHP cas 客户端测试程序解压CAS-1.0.1.tgz,将CAS 目录和CAS.php 拷入C:AppServwww(AppServ默认安装目录中的www目录)中。这样, cas 的php客户端就配置好了。我们来测试一下这个php的cas 客户端是否起作用。 修改php客户端自带的一个示例:example_simple.php,并拷贝到www目录中。代码修改如下:<?php / phpCAS simple c
29、lient/ import phpCAS libinclude_once('CAS.php'); phpCAS:setDebug();/ initialize phpCASphpCAS:client(CAS_VERSION_2_0,'localhost',8443,'cas'); / no SSL validation for the CAS serverphpCAS:setNoCasServerValidation();/ force CAS authenticationphpCAS:forceAuthentication(
30、);/ at this step, the user has been authenticated by the CAS server/ and the user's login name can be read with phpCAS:getUser()./ logout if desiredif (isset($_REQUEST'logout') phpCAS:logout();/ for this test, simply print that the authent
31、ication was successfull?><html> <head> <title>phpCAS simple client</title> </head> <body> <h1>Successfull Authentication!</h1> <p>the user's login is <b><?php
32、 echo phpCAS:getUser(); ?></b>.</p> <p>phpCAS version is <b><?php echo phpCAS:getVersion(); ?></b>.</p> <p><a href="?logout=">Logout</a></p> </body></html>测试步骤:Ø
33、访问http:/localhost/ example_simple.phpØ CAS检测到用户没有登录,转向::7002/cas/login?service=http%3A%2F%2Flocalhost%2Fexample_simple.php 登录界面。Ø 在登录界面输入admin/admin用户名和密码。Ø 登录成功,转回http:/localhost/example_simple.php,并显示有关信息。3.2 PHP-CAS客户端PHP-CAS客户端主要CAS文件夹和CAS.php。3.2.1 cas-client的初始化正如上面给出的example_si
34、mple.php的简单例子,利用代码“phpCAS:client (CAS_VERSION_2_0,'localhost',8443,'cas'); ”完成了client的初始化操作。cas-client的初始化是由CAS.php做数据检查,具体实现是由client.php来完成client类的构造。代码如下:global $PHPCAS_CLIENT, $PHPCAS_INIT_CALL;phpCAS:traceBegin();if ( is_object($PHPCAS_CLIENT) ) phpCAS:error($PHPCAS_INIT_CAL
35、L'method'.'() has already been called (at '.$PHPCAS_INIT_CALL'file'.':'.$PHPCAS_INIT_CALL'line'.')');if ( gettype($server_version) != 'string' ) phpCAS:error('type mismatched for parameter $server_version (should be string')');if (
36、gettype($server_hostname) != 'string' ) phpCAS:error('type mismatched for parameter $server_hostname (should be string')');if ( gettype($server_port) != 'integer' ) phpCAS:error('type mismatched for parameter $server_port (should be integer')');if ( gettype($s
37、erver_uri) != 'string' ) phpCAS:error('type mismatched for parameter $server_uri (should be string')');/ store where the initialzer is called from$dbg = phpCAS:backtrace();$PHPCAS_INIT_CALL = array('done' => TRUE,'file' => $dbg0'file','line'
38、=> $dbg0'line','method' => _CLASS_.':'._FUNCTION_);CAS.php是一个phpCAS类,主要是为了CAS的实现做支持。可以在php代码中直接调用phpCAS类的方法,只要在代码前面加入“include_once('CAS.php');”。这个类中提供了两个initialization:phpCAS client initializer、phpCAS proxy initializer。分别初始化两种客户端:不带代理的客户端和有代理的客户端。该初始化都调用了client.
39、php中的client的构造函数,根据传入的参数的不同来区分是否具体代理。代码如下:/具有代理的client$PHPCAS_CLIENT = new CASClient($server_version,TRUE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_session);/不具有代理的client$PHPCAS_CLIENT = new CASClient($server_version,FALSE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_ses
40、sion);Client.php中的client构造主要完成以下工作:Ø 存储以前的session,创建新session;Ø 判断是否有代理功能并判断当前server_version是否支持(CAS_VERSION_1_0不支持);Ø 判断$server_hostname、$server_port、$server_uri是否合法;Ø 如果上述都合法则修正$server_uri(“/”与“”的区别);Ø 判断是否有代理功能,有则设置是否是CallbackMode;Ø 如果是CallbackMode则判断phpCAS是否是https;
41、216; 获取并保存ticket并根据不同的版本把它从CGI中移除,为了安全。完整代码见附录1。 3.2.2 设置不是SSL的CAS认证调用phpCAS类中的setNoCasServerValidation()进行设置。设置该CAS服务认证不是SSL方式的认证。如果不加入这句语句的话认证可能无法正常运行。如下图4所示:图4:没有加入phpCAS:setNoCasServerValidation()语句输入帐户密码后画面会停留在图4这个页面,无论你点击“是”还是“否”都无法进入你想进入的系统。当加入phpCAS:setNoCasServerValidation()语句后,点击图4页面上的“是”则
42、可以进入系统,如图5所示:图5:加入了phpCAS:setNoCasServerValidation()语句3.2.3 进行CAS认证在PHP代码中加入phpCAS:forceAuthentication();即可进行CAS认证。forceAuthentication()方法是phpCAS类中的一个方法。它完成了CAS认证的检查,首先检测是否初始化$PHPCAS_CLIENT,成功之后再检查之前是否认证过,以及记录此次认证。代码如下:function forceAuthentication()global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;phpC
43、AS:traceBegin();if ( !is_object($PHPCAS_CLIENT) ) phpCAS:error('this method should not be called before '._CLASS_.':client() or '._CLASS_.':proxy()');$auth = $PHPCAS_CLIENT->forceAuthentication();/ store where the authentication has been checked and the result$dbg = phpCAS
44、:backtrace();$PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,'file' => $dbg0'file','line' => $dbg0'line','method' => _CLASS_.':'._FUNCTION_,'result' => $auth );if ( !$auth ) phpCAS:trace('user is not authenticated, red
45、irecting to the CAS server');$PHPCAS_CLIENT->forceAuthentication(); else phpCAS:trace('no need to authenticate (user '.phpCAS:getUser().'' is already authenticated)');phpCAS:traceEnd();return $auth; 认证的实现是在client.php中的forceAuthentication()方法完成,它来完成是否认证的检查以及进行认证。forceAuthen
46、tication()通过调用isAuthenticated()来检查之前是否登录过,如果没有登录过则重定向至CAS。isAuthenticated()则又调用wasPreviouslyAuthenticated(),wasPreviouslyAuthenticated()在非代理模式下调用isSessionAuthenticated()来进行最终的session的检查从而完成是否认证的检查。现在我们来看看这几个方法的具体工作是哪些。 isSessionAuthent icated()function isSessionAuthenticated ()return !empty($
47、_SESSION'phpCAS''user');从代码可以看出,isSessionAuthenticated ()只是对$_SESSION'phpCAS''user'进行检查是否为空。如果为空的话则返回FALSE即没有认证过。反之返回TRUE即之前认证过了。 wasPreviouslyAuthenticated()wasPreviouslyAuthenticated()还区分了代理和非代理。对于有代理的,则进行$_SESSION'phpCAS''user'和$_SESSION'
48、phpCAS''pgt'进行是否为空检查并进行User、PGT、ST和PT的赋值。不存在的都赋值为空。并用phpCAS:trace()进行记录信息。对于没有代理的,则进行简单的phpCAS检查,调用isSessionAuthenticated ()来完成操作。同样调用phpCAS:trace()记录信息。并返回检查结果。在代理模式只有当$_SESSION'phpCAS''user'和$_SESSION'phpCAS''pgt'都存在的时候才返回TRUE,其他情况都返回FALSE。在非代理模式返回结构由isS
49、essionAuthenticated ()产生。代码见附录2.备注:该方法还会检查是否是CallbackMode,并进行适当的赋值。 isAuthenticated()isAuthenticated()主要是在完成wasPreviouslyAuthenticated()检查返回TRUE的情况下对ST、PT和PGT的检测(代理模式下才对PGT进行检测)。当存在ST时则对ST进行检测,调用validateST()完成检测,在检测成功的情况下记录信息返回TRUE,失败则返回FALSE。同样进行PT和PGT检测。如果ST和PT都不存在则检测失败,返回FALSE。代码见附录
50、.4 forceAuthentication()function forceAuthentication()phpCAS:traceBegin();if ( $this->isAuthenticated() ) / the user is authenticated, nothing to be done.phpCAS:trace('no need to authenticate');$res = TRUE; else / the user is not authenticated, redirect to the CAS serverif (isset($_SESSIO
51、N'phpCAS''auth_checked') unset($_SESSION'phpCAS''auth_checked');$this->redirectToCas(FALSE/* no gateway */);/ never reached$res = FALSE;phpCAS:traceEnd($res);return $res;forceAuthentication()并不复杂,它首先调用isAuthenticated()来检测是否登录过,在失败的情况下才进行重定向至CAS服务器,在此我就不多加解释了,代码一目了然
52、。综上所述:CAS的认证步骤如下:非代理模式方法调用过程:phpCAS:forceAuthentication()->”PHPCAS_CLIENT->forceAuthentication()”-> “PHPCAS_CLIENT-> isAuthenticated()”->” PHPCAS_CLIENT->wasPreviouslyAuthenticated()”->” PHPCAS_CLIENT->isSessionAuthenticated”实际检测过程:$_SESSION'phpCAS''user'->
53、 ST/PT->TRUE代理模式方法调用过程:phpCAS:forceAuthentication()->”PHPCAS_CLIENT->forceAuthentication()”-> “PHPCAS_CLIENT-> isAuthenticated()”->” PHPCAS_CLIENT->wasPreviouslyAuthenticated()”实际检测过程:$_SESSION'phpCAS''user'&& $_SESSION'phpCAS''pgt'->ST
54、/PT和PGT->TRUE备注:检测过程只要一个不通过就返回FALSE。检测结果是TRUE的无需登录直接进入业务系统。检测失败尚未登录FALSE->” PHPCAS_CLIENT->redirectToCas()”->CAS服务器进行认证3.2.4 登出在PHP代码中加入:if (isset($_REQUEST'logout') phpCAS:logout();即完成了登出功能。isset($_REQUEST'logout')是检测是否有logout请求,如果有则调用phpCAS:logout()进行登出。 phpCAS:l
55、ogout()phpCAS:logout首先检测$PHPCAS_CLIENT是否被初始化,然后检测参数$params是否是array类型,如果是string类型则提示要求调用phpCAS:logoutWithUrl($url)。在检测$params为array类型后将$params中的$key = "service" 和$key = "url"的元素复制到$parsedParams中。并调用$PHPCAS_CLIENT->logout($parsedParams)进行logout处理。phpCAS:logout()的代码见附录4.phpCAS中有很
56、多中logout的方法,每种方法都能实现不同的登出方式,这些方法有:logoutWithRedirectService($service)、logoutWithRedirectServiceAndUrl($service, $url)、logoutWithUrl($url)还有上面说的最简单的logout()。他们的实现都很简单,都是先进行参数检测再调用$PHPCAS_CLIENT->logout(参数),根据输入不同的参数来完成不同的logout。 $PHPCAS_CLIENT->logout($parsedParams)$PHPCAS_CLIENT->log
57、out($parsedParams)完成logout功能,代码如下:function logout($params) phpCAS:traceBegin();$cas_url = $this->getServerLogoutURL();$paramSeparator = '?'if (isset($params'url') $cas_url = $cas_url . $paramSeparator . "url=" . urlencode($params'url'); $paramSeparator = '&am
58、p;'if (isset($params'service') $cas_url = $cas_url . $paramSeparator . "service=" . urlencode($params'service'); header('Location: '.$cas_url);session_unset();session_destroy();$this->printHTMLHeader($this->getString(CAS_STR_LOGOUT);printf('<p>
59、39;.$this->getString(CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED).'</p>',$cas_url);$this->printHTMLFooter();phpCAS:traceExit();exit();从代码可见,logout()根据传入参数的不同创建不同的cas_url从而logout到不同的页面。综上所述,要完成logout只用根据需求选择phpCAS中的不同logout方法即可完成。不同的logout方法归根结底都是通过调用CASClient类中的logout(参数),传入不同的参数来完成不同的登出。4. ASP.NET语言4.1 搭建ASP.NET环境4.2 CAS简单登陆实现CAS .NET客户端,是一个dll文件,可以在项目中引用,然后通过下边的代码就可以使用:在web.config文件中增加关于cas服务器和本地服务的地址信息:<configuration> <appSettings> <add key="casLoginURL" value=":7002/cas/login" /> <add key=&q
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单位管理制度呈现大全【职工管理】
- 《会展项目管理复习》课件
- 《市场营销环境》课件
- 银行工作总结服务至上效率为王
- 家政服务行业销售工作总结
- 保育实习工作总结15篇
- 2023年项目部安全培训考试题加答案解析
- 2023年员工三级安全培训考试题及答案(考点梳理)
- 中考誓师口号(15篇)
- 2023年-2024年项目部治理人员安全培训考试题加答案解析
- 国家开放大学电大本科《国际私法》期末试题及答案(n试卷号:1020)
- 四川省德阳市中学2023年高一物理上学期期末试卷含解析
- 举高消防车基础知识
- 2022年成都温江兴蓉西城市运营集团有限公司招聘笔试试题及答案解析
- 空气、物表地面消毒登记记录
- 急性脑梗死诊治指南
- 检察院分级保护项目技术方案
- 土木工程建筑中混凝土裂缝的施工处理技术毕业论文
- 水电站工程地质勘察报告
- 电站屏柜改造安装二次工程施工组织设计
- DB42∕T 1795-2021 微动勘探技术规程
评论
0/150
提交评论