2012-07-31 54 views
3

我有Apache2與PyAuthenNTLM2模塊(見https://github.com/Legrandin/PyAuthenNTLM2)。這個Apache模塊將windows用戶名放在$ _SERVER ['REMOTE_USER']中。Apache2,PHP:創建自動ntlm登錄頁面

爲了使這一點,你需要把指令類似Apache的配置(或htaccess的)文件或目錄如下:

Order allow,deny 
Allow from all 

AuthType NTLM 
AuthName "Test" 
require valid-user 

PythonAuthenHandler pyntlm 
PythonOption Domain TESTDOMAIN 
PythonOption PDC 192.168.0.10 

的事情是,這樣一個目錄下的所有文件(包括CSS, js)只有在NTLM憑據由瀏覽器提供時纔可訪問。因此,在一個不是不起作用的頁面中使用一個包含「ntlm protected」的include。

無論如何,我想要的是一個單獨的頁面,建立一個會話,並進一步授權使用會話完成。如果會話尚未設置或過期,用戶將被無形地轉移到自動登錄頁面,然後返回到實際請求的頁面。

我該如何做到這一點?

回答

2

我想出了下面的腳本/解決方案:

<?php 

$validApplications = array("Application_1", "Application_2"); 
$baseUrl = 'http://' . $_SERVER["SERVER_NAME"] . '/'; 

if(!isset($_SERVER["REMOTE_USER"])){ 
    header('HTTP/1.1 401 Not Authorized', true, 401); 
    //...display error page 
    exit(0); 
} 

if(!isset($_GET["applicationName"]) 
     || !in_array($_GET["applicationName"], $validApplications)){ 
    header('HTTP/1.1 400 Bad Request', true, 400); 
    //...display error page 
    exit(0); 
} 

$application = $_GET["applicationName"]; 

if(!isset($_GET["returnTo"])){ 
    $returnTo = $baseUrl . $application . "index.php"; 
} else { 
    $returnTo = $_GET["returnTo"]; 
} 

$sessionName = "PHP" . $application . "Session"; 

session_name($sessionName); 
session_start(); 

session_regenerate_id(TRUE); 
/* erase data carried over from previous session */ 
$_SESSION=array(); 
$_SESSION['login'] = $_SERVER['REMOTE_USER']; 
header("Location: " . $returnTo); 
?> 

該腳本,讓調用它的login.php必須是根據Apache2的模塊下,可以設置$ _SERVER [「REMOTE_USER」](我使用PyAuthenNTLM2)就像顯示在我的問題。

在ANA應用程序的每個網頁,然後必須首先檢查是否$ _SESSION [「登錄」]設置與否,如果沒有重定向到該登錄頁面:

if (!isset($_SESSION['login'])) { 
    $queryString = "returnTo=" . urlencode($_SERVER["REQUEST_URI"]) . "&applicationName=Application_1"; 
    header ("location: " . $baseUrl . "login.php?" . $queryString); 
    exit(0); 
} 
+0

謝謝你很多!我有一個類似的問題,你的想法解決了它! – Hikari 2013-03-02 00:12:44

0

我已經使用Apache和PHP完成了這項工作,您需要查看會話處理。快速谷歌爲「蟒蛇會話處理」返回各種例子

+0

還是要謝謝你,但我的問題是有點多具體。我甚至在我嘗試這裏之前總是谷歌。 – 2012-08-02 05:01:45