我尝试使用NTLM在Windows域中创建SSO,并且在不在Windows域中的Linux机器上没有带有Apache2服务器的服务器模块。不知道这是否可能。但我现在告诉你我已经想到了什么以及我接下来要知道的事情。
好的,首先我打开了我的浏览器(IE和FF)使用NTLM数据(消息类型1)发送Authorization
标头的选项。这有点像我得到一个字符串:
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服务器在哪个端口上响应我的NTLM数据?
答案 0 :(得分:1)
仅使用PHP无法实现。验证NTLMv2凭据需要SecureChannel加密的RPC与Active Directory DC的NETLOGON服务。说这是一件很难的事情,这是轻描淡写的。
在Linux环境中,最好的选择是查看Samba&#34; winbind&#34;打包并在Apache级别执行身份验证。这些模块一直是一个有点笨拙的IMO,但mod_auth_kerb和mod_auth_winbind是我检查过的这类事情的标准模块。