統一身份認證平臺集成接口文檔_第1頁
統一身份認證平臺集成接口文檔_第2頁
統一身份認證平臺集成接口文檔_第3頁
統一身份認證平臺集成接口文檔_第4頁
統一身份認證平臺集成接口文檔_第5頁
已閱讀5頁,還剩33頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論