Apache2,PHP:创建自动ntlm登录页面

Apache2,PHP:创建自动ntlm登录页面,php,apache2,ntlm,Php,Apache2,Ntlm,我有一个带有PyAuthenNTLM2模块的Apache2(请参阅)。此Apache模块将windows用户名放入$\u服务器['REMOTE\u user'] 要启用此功能,您需要在文件或目录的apache配置(或htaccess)中放置类似于以下内容的指令: Order allow,deny Allow from all AuthType NTLM AuthName "Test" require valid-user PythonAuthenHandler pyntlm PythonOp

我有一个带有PyAuthenNTLM2模块的Apache2(请参阅)。此Apache模块将windows用户名放入$\u服务器['REMOTE\u user']

要启用此功能,您需要在文件或目录的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
问题是,只有在浏览器提供NTLM凭据的情况下,才能访问此类目录下的任何文件(包括css、js)。因此,在不受保护的页面中使用“ntlm保护”的包含将不起作用

无论如何,我想要的是一个设置会话的单一页面,并使用会话进行进一步授权。如果会话尚未设置或已过期,则用户将以不可见的方式转移到自动登录页面,然后返回到实际请求的页面


如何实现这一点?

我已经用Apache和PHP实现了这一点,您需要了解会话处理。“python会话处理”的快速谷歌搜索返回了各种示例

我想出了以下脚本/解决方案:

<?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);
?>

谢谢,不过我的问题有点具体。我总是在尝试之前先谷歌一下。非常感谢!我有一个类似的问题,你的想法解决了!
if (!isset($_SESSION['login'])) {
    $queryString = "returnTo=" . urlencode($_SERVER["REQUEST_URI"]) . "&applicationName=Application_1";
    header ("location: " . $baseUrl . "login.php?" . $queryString);
    exit(0);
}