我尝试使用 NTLM 在 Windows 域中创建 SSO,并且在不在 Windows 域中的 Linux 机器上使用 Apache2 服务器没有服务器模块。不知道这是否可能。但我现在向你展示我已经想出的东西以及我接下来要知道的东西。
好的,首先我打开了我的浏览器(IE 和 FF)发送Authorization
带有 NTLM 数据(消息类型 1)的标头的选项。这有效,我得到一个字符串,如:
NTLMSSP²¢1 (±USERS-PCDOMAIN
但接下来是什么?我必须将此字符串发送到我的 AD 运行的服务器吗?所以我的服务器被称为SERVER1.DOMAIN
并具有 IP 192.168.1.14
。
我现在可以使用哪种协议以及以哪种方式将消息类型 1 发送到我的 AD 服务器以获取 NTLM 质询消息(类型 2)?
我想我必须写这样的东西:
<?php
$fp = fsockopen("192.168.1.14", 80 /* <--- which port? */, $errno, $errstr, 30);
if (!$fp)
die("$errstr ($errno)");
fwrite($fp, $headers['Authorization'] . "\r\n");
$ntlmChallengeData = '';
while (!feof($fp)) {
$ntlmChallengeData .= fgets($fp, 128);
}
fclose($fp);
var_dump($ntlmChallengeData); // The challenge data
但是 Windows Server 在哪个端口上响应我的 NTLM 数据?