的Apache2,PHP:创建自动NTLM登录页面(Apache2, PHP: create aut

2019-06-26 15:31发布

我有Apache2中PyAuthenNTLM2模块(见https://github.com/Legrandin/PyAuthenNTLM2 )。 这Apache模块在$ _ SERVER [“REMOTE_USER”]把Windows用户名。

为了使这一点,你需要把类似一个指令在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保护”。

反正我要的是建立一个会话单页,并进一步授权使用会话来完成。 如果会议尚未设定或已过期的用户不可见的转移到自动登录页面,然后再返回到实际的请求的页面。

我怎样才能做到这一点?

Answer 1:

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

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


Answer 2:

我已经做到了这一点与Apache和PHP,你需要看会话处理。 快速谷歌为“蟒蛇会话处理”返回各个实例



文章来源: Apache2, PHP: create automatic ntlm login page
标签: php apache2 ntlm