gpt4 book ai didi

php - Apache 2,PHP : create automatic ntlm login page

转载 作者:搜寻专家 更新时间:2023-10-31 21:14:38 30 4
gpt4 key购买 nike

我有带 PyAuthenNTLM2 模块的 Apache2(参见 https://github.com/Legrandin/PyAuthenNTLM2)。这个 Apache 模块将 Windows 用户名放在 $_SERVER['REMOTE_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)。因此,在不 protected 页面中使用受“ntlm 保护”的包含将不起作用。

无论如何,我想要的是一个设置 session 的页面,并使用该 session 完成进一步的授权。如果 session 尚未设置或已过期,用户将被无形地转移到自动登录页面,然后返回到实际请求的页面。

我怎样才能做到这一点?

最佳答案

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

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

关于php - Apache 2,PHP : create automatic ntlm login page,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11736544/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com