SSO только с NTLM и PHP

Я пытаюсь создать единый вход в домене Windows с использованием NTLM и без серверных модулей с сервером Apache2 на компьютере с Linux, который не находится в домене Windows. Не знаю, возможно ли это вообще. Но сейчас я покажу вам, что я выяснил и что я должен знать дальше.

Хорошо, сначала я включил параметры, которые мой браузер (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?

1 ответ

Решение

Это невозможно, используя только PHP. Для проверки учетных данных NTLMv2 требуются зашифрованные RPC SecureChannel со службой NETLOGON контроллера домена Active Directory. Сказать, что это трудно сделать, - преуменьшение.

В среде Linux лучше всего было бы заглянуть в пакет "winbind" Samba и выполнить аутентификацию на уровне Apache. Эти модули всегда были немного неуклюжими IMO, но mod_auth_kerb и mod_auth_winbind являются стандартными модулями для этого типа вещей, которые я проверял в последний раз.

Другие вопросы по тегам