簡體   English   中英

Apache2,PHP:創建自動ntlm登錄頁面

[英]Apache2, PHP: create automatic ntlm login page

我有Apache2和PyAuthenNTLM2模塊(參見https://github.com/Legrandin/PyAuthenNTLM2 )。 這個Apache模塊將windows用戶名放在$ _SERVER ['REMOTE_USER']中。

要啟用此功能,您需要在apache config(或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

問題是只有在瀏覽器提供NTLM憑證時才能訪問此類目錄下的任何文件(包括css,js)。 因此,在頁面中使用“ntlm protected”的包不會起作用。

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

我怎么能實現這一目標?

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

<?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 ['login'],如果沒有重定向到此登錄頁面:

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

我用Apache和PHP完成了這個,你需要看看會話處理。 一個快速的谷歌“python會話處理”返回了各種例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM