繁体   English   中英

仅限于NTLM和PHP的SSO

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM