【问题标题】:SSO with NTLM and PHP only仅使用 NTLM 和 PHP 的 SSO
【发布时间】:2014-06-15 14:03:32
【问题描述】:

我尝试使用 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 数据?

【问题讨论】:

    标签: php ntlm ntlmv2


    【解决方案1】:

    仅使用 PHP 是不可能的。验证 NTLMv2 凭据需要使用 Active Directory DC 的 NETLOGON 服务的 SecureChannel 加密 RPC。轻描淡写地说这是一件困难的事情。

    在 Linux 环境中,最好的办法是查看 Samba“winbind”包并在 Apache 级别进行身份验证。这些模块在 IMO 中一直有点笨拙,但 mod_auth_kerb 和 mod_auth_winbind 是我上次检查的这类东西的标准模块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多