[英]SSO with NTLM and PHP only
我尝试使用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 Server在哪个端口上响应我的NTLM数据?
仅使用PHP是不可能的。 验证NTLMv2凭据需要具有Active Directory DC的NETLOGON服务的SecureChannel加密RPC。 轻描淡写地说这是一件困难的事情。
在Linux环境中,最好的选择是查看Samba“ winbind”软件包并在Apache级别进行身份验证。 这些模块一直是一个笨拙的IMO,但是mod_auth_kerb和mod_auth_winbind是我上次检查过的这类东西的标准模块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.