国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

用 Oracle AS 10g 為PHP提供的一次性登錄

2024-08-29 13:36:30
字體:
來源:轉載
供稿:網友

  php 和 Oracle application Server
  
  PHP 是一種強大、靈活的開放源代碼腳本語言,它一般用于在 web 頁面中生成動態內容。(PHP 類似于 Perl,但遠沒有那么復雜。關于更多的背景知識,請訪問 OTN 的開放源代碼開發人員中心。}PHP 為大多數數據庫產品(包括 Oracle)提供了一系列隨取隨用的豐富特性和服務(包括 LDAP、IMAP、SNMP、NNTP、POP3、HTTP、xml、XSL)以及數據庫訪問模塊。PHP 可以作為 CGI 在 Apache 下運行,或者可以配置為 Apache Web Server 模塊。
  
  將 PHP 與 Oracle Application Server 集成非常輕易,因為 Oracle HTTP Server 是一個 Apache Web Server。Mod_osso 作為 Apache 模塊與 Oracle Application Server 集成在一起,因此利用該應用服務器的特性來保護 PHP 頁面是一件很簡單的事情。
  
  方法 1:PHP 代理頁面方法
  Mod_osso 通過已注冊的 URL 模式來保護 web 頁面。它檢查通過 Oracle HTTP Server 的所有請求;假如請求或 URL 包含了一個被保護的模式,而請求者還沒有在 SSO 服務器上得到驗證,那么該請求者將被重定向到 SSO 登錄屏幕。SSO 啟用 PHP 頁面的代理頁面方法利用了一個已注冊的 URL 模式,該模式被映射到一個特定的 PHP 頁面上。通過在 mod_osso.conf 文件中按下面的說明記錄該模式,可以向 mod_osso 注冊 URL:
  
  
  <Location /php_apps/ssoreroute.php>
  require valid-user
  authType Basic
  </Location>
  
  受保護的 PHP 頁面充當您想要保護的其它所有 PHP 頁面的代理。
  
 用 Oracle AS 10g 為PHP提供的一次性登錄(圖一)

  在圖 1中,PHP 文件(SSOUtils.php;參見列表 1)充當庫,它包含了一個名為 checkAuthenticated() 的用戶自定義函數,并被包含在我們試圖實現 SSO 的 PHP 頁面(MyPage.php;參見列表 2)中。該函數在我們要實現 SSO 的頁面上運行,并檢查請求者是否已在 SSO 服務器上得到了驗證。假如請求者還沒有得到驗證,那么請求者將被自動重定向到 php 代理頁面,該頁面的 URL 模式在 mod_osso 進行了注冊。該 php 代理頁面 (ssoreroute.php) 將調用頁面的 URL 作為一個參數提取出來。請求者被 mod_osso 重定向到登錄屏幕。在成功驗證之后,請求者被重定向回 PHP 代理頁面,該頁面按順序將請求者重定向回調用頁面。
  
  函數 checkAuthenticated() 的 PHP 腳本非常簡單:
  
  function checkAuthenticated(){
  
  $SSO_REROUTE = "/php_apps/ssoreroute.php?p_redirect_url=";
  $SSO_USER  = getenv("REMOTE_USER");
  
  if (empty($SSO_USER)){
  
  header("Location:".$SSO_REROUTE.$_SERVER['PHP_SELF']);
  
   }
  
  }
  
  PHP 代理頁面的腳本同樣很簡單:
  
  <?php
  
  //重定向回被請求的頁面。
  header("Location:".$_REQUEST['p_redirect_url']);
  
  ?>
  
  但登錄只是 SSO 服務器完整功能的一部分。我們還能夠注銷,這通常稱為一次性注銷。注銷基于 SSO 的頁面是一個簡單的重定向到 URL /osso_logout?p_done_url=<return url> 的操作。注銷 URL 是 SSO 服務器的一個特性。
  
  下面的函數 ssoLogoutLink(<return url>) 創建了一條自定義的注銷鏈接:
  
  
  function ssoLogoutLink($RETURN_URL=""){
  
  $DONE_URL = "";
  
  if (empty($RETURN_URL)){
  $DONE_URL=$_SERVER['PHP_SELF'];
  } else {
  $DONE_URL=$RETURN_URL;
   }
  
  $SSO_LOGOUT_URL = "/osso_logout?p_done_url=".$DONE_URL;
   
  $LOGOUT_LINK  = "<a href=/"".$SSO_LOGOUT_URL."/">Click here to Logout</a>";
  
  return $LOGOUT_LINK;
  
  }
  
  代理頁面方法是一種非常簡單的利用基本 mod_osso 功能來保護 PHP 頁面的方法。
不過它將請求者限制在了與 mod_osso 相關的默認注銷和返回 URL 上。因而,這種方法沒有提供非常細粒化的控制。相比而言,在接下來的內容中要討論的方法通過使用 servlet 和動態指令提供了更細粒化的控制。
  
  方法 2:SSO LoginPRoxy 和 LogoutProxy Servlet 方法
  
  動態指令是 mod_osso 的特性,它答應開發人員對應用程序與 SSO 服務器的交互方式進行細粒化的控制。動態指令由 HTTP 響應標題和一組專門的錯誤代碼組成。使用動態指令來開始驗證和注銷的應用程序不需要向 mod_osso 注冊 URL 模式。要警惕的一點是,動態指令必須和 OC4J (J2EE) 應用程序(如 servlet 或 jsp)結合使用。
  
  利用了動態指令的 SSO 使能的 PHP 頁面可以通過使用一個代理 servlet 來實現,該 servlet 替請求的 PHP 頁面將動態指令發送給 mod_osso。下面敘述的方法(參見圖 2)使用了兩個 servlet,一個用于登錄,一個用于注銷。
  
用 Oracle AS 10g 為PHP提供的一次性登錄(圖二)

  在圖 2 中,一個 PHP 文件(SSOUtils.php;參見列表 1)充當了資料庫,它包含了一個名稱為 checkAuthenticatedProxy() 的用戶自定義函數,并被包含在我們試圖實現 SSO 的 PHP 頁面(MyPage.php;參見列表 2)中。該函數在我們通過 SSO 啟用的頁面上運行,并檢查請求者是否已經在 SSO 服務器上得到了驗證。假如該請求者還沒有得到驗證,那么它將連同一個參數被自動重定向到登錄代理 servlet 上,該參數指定了到調用頁面的返回 URL。登錄代理 servlet 發出所需的動態指令來將一條 SSO 登錄請求發送給 SSO 服務器。請求者被 mod_osso 重定向到登錄屏幕。在成功驗證之后,請求者被重定向回登錄代理 servlet 從調用頁面接收到的返回 URL 上。
  
  注銷過程是類似的:一個 PHP 函數 ssoLogoutLinkProxy(<return url>) 運行以創建到注銷代理 servlet 的一條超鏈接。注銷代理 servlet 發出所需的動態指令來發送一條 SSO 注銷請求給 SSO 服務器。請求者被注銷,并被重定向到 SSO 注銷屏幕。在單擊注銷屏幕中的 Return 按鈕之后,請求者被重定向回注銷代理 servlet 從調用頁面接收到的返回 URL 上。
  
  函數 checkAuthenticatedProxy() 的 PHP 腳本基本上和先前的方法中所敘述的 checkAuthenticate() 的 PHP 腳本一樣。函數之間主要的區別是重定向 URL。checkAuthenticatedProxy() 的 PHP 腳本是:
  
  function checkAuthenticatedProxy(){
  
  $SSO_REROUTE = "/ssoproxy/loginProxy?p_redirect_url=";
  $SSO_USER  = getenv("REMOTE_USER");
  
  if (empty($SSO_USER)){
  
  header("Location:".$SSO_REROUTE.$_SERVER['PHP_SELF']);
  
   }
  
  }
  
  函數 ssoLogoutLinkProxy(<return url>) 的 PHP 腳本基本上和函數 ssoLogutLink(<return url>) 相同,兩個函數之間主要的區別是重定向 URL。ssoLogoutLinkProxy(<return url>) 的 PHP 腳本是:
  
  function ssoLogoutLinkProxy($RETURN_URL=""){
  
  $DONE_URL = "";
  
  if (empty($RETURN_URL)){
  $DONE_URL=$_SERVER['PHP_SELF'];
  } else {
  $DONE_URL=$RETURN_URL;
   }
  
  $SSO_LOGOUT_URL = "/ssoproxy/logoutProxy?p_done_url=".$DONE_URL;
   
  $LOGOUT_LINK  = "<a href=/"".$SSO_LOGOUT_URL."/">Click here to Logout</a>";
  
  return $LOGOUT_LINK;
  
  }
  
  列表 3 中的 java 類說明了創建上述方法中使用的每一個代理 servlet 所需的代碼。兩個 servlet 都包含了對一個名為 SSOUtilities 的 Java 類的引用。SSOUtilities 是包含了用來發出動態指令和其它與 SSO 相關功能的封裝方法的一個類。兩個 servlet 都被映射到了與應用程序相關的web.xml 文件中定義的特定 URL 模式上。
  
  您可以看到,登錄代理和注銷代理 Servlet 方法對登錄和注銷之后 PHP 應用程序的流動方式提供了更細粒化的控制。
  
  我應當選擇哪種方式?
  在看了通過 SSO 啟用 PHP 頁面的兩種方法之后,您可能很自然地想問“我應當選擇哪種方法?”,或者更進一步“為什么我要選擇更復雜的而不是更簡單的解決方案?”這些問題的答案取決于您需要控制 SSO 的程度。假如您所有應用程序或頁面需要的是基本的保護,那么 PHP 代理方法將滿足您的需要。但假如您的應用程序需要通過使用動態指令來提供更細粒化的控制,那么 SSO LoginProxy 和 LogoutProxy 方法將是更好的選擇。

  
  第一種方法可以有效地發揮作用,但沒有提供足夠的靈活性;它還要求實際向 mod_osso 注冊一個 URL 模式,而第二種方法沒有這種要求。第二種解決方案不僅提供了動態指令的靈活性,而且可以擴展或改變來滿足一組更加定制化的需求。
  
  各有千秋
  理論上,任何能夠在 Oracle Application Server 下部署的腳本語言(Perl、Python、ColdFusion)都可以使用我提到過的相同方法來與 mod_osso 交互并啟用 SSO。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 芜湖市| 宜阳县| 新乡市| 合作市| 江口县| 苍山县| 乌兰察布市| 九龙城区| 青神县| 松原市| 青冈县| 浦江县| 江陵县| 奉新县| 台安县| 鸡泽县| 惠水县| 娄烦县| 西吉县| 武宣县| 寿阳县| 日照市| 札达县| 阿鲁科尔沁旗| 施甸县| 台江县| 金川县| 天全县| 阳春市| 广水市| 乾安县| 加查县| 察隅县| 连州市| 和林格尔县| 明星| 鸡西市| 湖南省| 修水县| 通山县| 永兴县|