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

2023-12-03

我有 Apache2 和 PyAuthenNTLM2 模块(请参阅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)。因此,在未受“ntlm 保护”的页面中使用受“ntlm 保护”的包含内容将不起作用。

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

我怎样才能做到这一点?


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

<?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),如我的问题中所示。

应用程序中的每个网页必须首先检查 $_SESSION['login'] 是否设置,如果没有则重定向到此登录页面:

if (!isset($_SESSION['login'])) {
    $queryString = "returnTo=" . urlencode($_SERVER["REQUEST_URI"]) . "&applicationName=Application_1";
    header ("location: " . $baseUrl . "login.php?" . $queryString);
    exit(0);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache2、PHP:创建自动ntlm登录页面 的相关文章

  • 字符串不等于其自身

    But why if i echo good else echo bad echos gt gt bad 您应该复制此片段 如果你手写的话 它会起作用 它让我疯狂 你太狡猾了 第二个 I 不是小写拉丁文小写 i 我把它转储了 hexdump
  • 显示文件夹并建立这些文件夹的链接

    我正在寻找用 PHP 构建一个目录浏览器 我刚刚开始编写代码 但需要有人帮助我完成或修改它 dir dirname FILE path of the directory to read iterator new RecursiveDirec
  • Composer 自动加载始终是第一位的

    我在一个遗留项目中使用作曲家 该项目有很多没有命名空间的类 重构不是一个选项 这是一个非常庞大的应用程序 但所有新模块都完全符合 psr 4 遗留代码有它自己的自动加载方法 使用类映射 非常有效 我的问题是 无论我以什么顺序添加自动加载器方
  • 无法在WordPress的functions.php中使用php fopen()函数

    我正在尝试简单地运行 fopen 函数 php 并且也尝试过test phpWordPress 模板文件 但这不起作用 如果我将 test php 文件和 csv 文件移动到主题文件夹之外的位置 那么它第一次可以工作 function cs
  • CodeIgniter 中的 base_url() 和 403 错误

    在 HTML 视图中 css 链接代码如下所示 但我的浏览器显示的地址具有双域地址 www jedendzien pl www jedendzien pl assets css style css 所以我收到 403 错误 我通过以下方式创
  • LDAP 过滤器用于区分名称

    我使用以下代码成功查询 Active Directory 中的用户 filter objectCategory person samaccountname someusername fields array samaccountname m
  • PHP,检查 URL 和文件是否存在?

    我为 WordPress 创建了一个插件 需要存在两个文件才能正常运行 第一个文件定义为文件系统路径 第二个文件定义为 URL 假设第一个文件是 home my site public html some folder required f
  • 电子邮件标题中的特殊字符是什么以及何时使用引号?

    我正在尝试使用 PHP 发送和阅读电子邮件 到目前为止 我发现我必须使用该函数对特殊字符进行编码mb encode mimeheader 但我不必对空格进行编码 我还发现地址字段中的括号不起作用 读取带有括号的标题时 PHP 的 imap
  • orm和pdo的区别

    我对 ORM 和 PDO 之间的区别有点困惑 PDO是一种ORM吗 根据我的理解 ORM 基本上是一种数据映射 PDO 还提供了数据库数据的抽象 PDO 和 ORM 是两个完全不同的东西 PDO 是数据库访问抽象层的具体实现 它使您能够使用
  • 通过 wp_handle_upload 删除未放入上传文件夹中的图像

    我正在将图像保存到上传文件夹 但我正在使用文件放置内容 http php net manual en function file put contents php代替wp 句柄 上传 https codex wordpress org Fu
  • 关联数组与 SplObjectStorage

    我正在编写代码来管理一组独特的对象 该代码的第一个原型使用关联数组 基本上就像我一直这样做的方式一样 然而 我也热衷于利用 PHP 的更现代版本中添加的功能 例如 SplObjectStorage 1 这样做 部分是作为一种学习经验 部分是
  • 使用类型映射选项的 PHP SoapClient 示例

    我在 PHP 的 SoapClient 中的命名空间使用方面遇到了一个小问题 从文档中我相信构造函数的类型映射选项将解决我的问题 http php net manual en soapclient soapclient php http p
  • Magento:查找包含产品的订单

    Magento 有没有办法找到包含给定产品的所有订单 如果可以通过管理面板来完成就更好了 报告 gt 产品 gt 订购的产品向我提供了产品销售的日期以及包含该产品的订单数量 但我需要知道哪些特定订单包含该产品 谢谢你 这个问题我在另一个问题
  • 在 PHP 页面中嵌入 svn 修订号的简单方法?

    注意到这个页面的右下角有 SVN 修订 ID 了吗 我假设这是动态的 我很乐意将其添加到我的一些网站中 就像源代码中的注释一样 以确保代码推送顺利进行 注意 您还可以假设相关站点的工作目录是相关存储库的 svn checkout Edit
  • 如何在服务器(无 GUI)上呈现网页以进行打印?

    我正在尝试使用 PHP 脚本将页面实用地打印到办公室打印机 这是我到目前为止所得到的 我在服务器上安装了一台打印机 我可以通过命令行的打印命令使用 PHP 向其发送作业 我还可以使用 PHP 脚本编写纯文本文件 然后将它们添加到打印提示中
  • ajax - 检查用户名是否存在+如果存在则返回消息

    我试图检查用户想要的用户名是否已被使用 而无需发送表单 基本上是用户名字段的模糊 我遇到了一些麻烦 有几个问题 我有我的输入字段加上js
  • 一个模型中的多个表 - Laravel

    我的索引页使用数据库中的 3 个表 索引滑块 索引特征 页脚框 我使用一个控制器 IndexController php 并像这样调用三个模型 public function index return View make index gt
  • 为什么 foreach 这么慢?

    PHPBench com http www phpbench com 在每个页面加载上运行快速基准测试脚本 在 foreach 测试中 当我加载它时 foreach 的运行时间是第三个示例的 4 到 10 倍 为什么本机语言构造明显比执行逻
  • 使用 jQuery 将值发送到 $_GET

    我正在使用一个 PHP 脚本 该脚本正在通过 GET 等待两个值 我正在尝试使用 jQuery 传递这两个值 而这正是我不太擅长的地方 这是我得到的代码 有人能指出我正确的方向吗 谢谢 function xrate id rating aj
  • 散列 hash_hmac 时,Convert.ToChar(0) 散列结果与 PHP 中的 chr(0) 不同的字符串

    我在 PHP 中有一个字符串 它被转换为字节数组并进行哈希处理 转换为字节数组的字符串如下所示 G 字符 0 便便 我需要 C 中的等效字节数组 这样我才能得到相同的哈希值 编辑 这是完整的问题 生成的哈希值不同 PHP api secre

随机推荐

  • Python Seaborn 绘制空白直方图

    我正在尝试使用 python 中的seaborn 绘制直方图 但它给我的只是一个空白的数字 这里是describe 我的专栏 代码 plt subplots figsize 7 7 sns histplot data contratos x
  • 如何动态向react-bootstrap-table列添加href?

    我在react中使用react bootstrap table作为数据表 这里从后端获取c data作为JSON对象 如何动态地将ahref添加到react bootstrap table中的列 const data id 0 name J
  • 将列表传递给 subprocess.run

    我有一个脚本 其中包含一个列表 该列表只是我想传递给的一些参数subprocess run像这样 commands bash command 1 bash command 2 这是我的代码 commands bash command 1 b
  • Pandas read_csv 更改以 0 开头的列

    我有一个脚本 可以从 csv 文件中读取一些邮政编码 邮政编码的格式如下 zipcode 75180 90672 01037 20253 09117 31029 07745 90453 12105 18140 36108 10403 764
  • Bitbucket 管道:gcloud 崩溃 (UnicodeDecodeError)

    编辑 我想指出 如果我在计算机上使用云 sdk 手动部署 则不会发生此问题 仅限管道 再次编辑 我在 gcloud 应用程序部署中添加了 verbosity debug 这是生成的内容 Do you want to continue Y n
  • Jersey REST 服务上的用户身份验证

    我正在开发一个 REST 应用程序 它使用 Jersey 框架 我想知道如何控制用户身份验证 我查了很多地方 找到最接近的文章是这样的 http weblogs java net blog 2008 03 07 authentication
  • 当 RecyclerView 正在计算布局或尝试从 recyclerview 中删除项目时滚动时,无法调用此方法

    我正在尝试从 recyclerview 中删除我的项目 但我总是收到错误 java lang IllegalStateException 无法调用此方法 RecyclerView 正在计算布局或滚动 我正在使用notify datasetc
  • DataTable Wrapper 或如何将 UI 与业务逻辑解耦

    我正在使用 Web 表单 C Asp net 众所周知 在这个模型中 UI和业务逻辑经常是混合在一起的 如何有效地将它们分开呢 我想使用的例子是 我有一个 GridView 和一个 DataTable GridView 绑定到 DataTa
  • 引用类型作为参数

    所以我深入阅读 Jon Skeet 的 C 并遇到了一些误解 比如引用类型总是通过 ref 传递 所以我决定自己做一个小实验 正如您在下面的代码中看到的 我有一个简单的 Car 类 其中一个属性在调用构造函数时初始化为 500 我还有 Nu
  • 在多个图中添加单独的箭头

    我想在用 ggplot 和 faceting 生成的 2 个图中添加箭头 问题 如何避免两个图中的箭头重复 我想为每个图添加单独的箭头 这是一个例子 library ggplot2 data frame with fake data xdf
  • Ruby 三元运算符结构

    puts bool true false 是正确的 但是 bool puts true puts false 不是 有人可以向我解释这是为什么吗 边注 bool puts true puts false 效果也很好 当您不在方法调用上添加括
  • Rails:如何将 i18n 与 Rails 4 枚举一起使用

    Rails 4 活动记录枚举很棒 但是使用 i18n 进行翻译的正确模式是什么 从Rails 5开始 所有模型都将继承自ApplicationRecord class User lt ApplicationRecord enum statu
  • SVG 未在 Windows Phone 8 Phonegap 应用程序中显示

    似乎无法找到任何答案 使用 Phonegap 并使用 SVG 图像开发 HTML5 应用程序 从 Adob e Illustrator 的 另存为 中保存它们 然后像 HTML 中的普通图像一样使用它们 img src img the im
  • 组合框中的热跟踪列表项选择

    我有一个组合框 当用户仅通过鼠标悬停来更改选择时 我需要拦截选择的更改without点击 这是为了显示有关用户将鼠标悬停在其上的项目的补充信息 CBN SELCHANGE不会完成这项工作 因为只有当用户有actually通过单击组合框项目之
  • git stash pop 和 git stash apply 之间的区别

    我一直在使用git stash pop很长一段时间 我最近了解到git stash apply命令 当我尝试它时 它的工作原理似乎与git stash pop 有什么区别git stash pop and git stash apply g
  • 快速识别用户在编辑 NSTextField 时是否按下了箭头键

    我有很多 NSTextField 我想知道用户在编辑其中之一时是否按下了方向键之一 功能 override func keyDown theEvent NSEvent switch theEvent character case NSRig
  • 如何使用 AndEngine 通过滑动来投掷/投掷球?

    我在屏幕上有一个球精灵 当我触摸并滑动该精灵时 它必须沿特定的滑动方向移动 我给那个球添加了物理原理 我想做类似的事情扔纸 谁能帮我吗 提前致谢 您需要重写 Sprite 的 onAreaTouched 方法 如下所示 您可以从 pScen
  • 条件面板上的动画

    我想在我的条件面板上添加一些动画 我找到了这里提供的解决方案 闪亮条件面板的动画 过渡 我真的很喜欢这个解决方案 但我有一个问题 检查以下示例 library shiny library shinyjs library shinydashb
  • 如何获取当前日期或/和时间(以秒为单位)

    如何使用 Javascript 获取当前日期或 和时间 以秒为单位 var seconds new Date getTime 1000 将为您提供自 1970 年 1 月 1 日午夜以来的秒数 参考
  • Apache2、PHP:创建自动ntlm登录页面

    我有 Apache2 和 PyAuthenNTLM2 模块 请参阅https github com Legrandin PyAuthenNTLM2 该 Apache 模块将 Windows 用户名放入 SERVER REMOTE USER