Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/22: Рейтинг темы: голосов - 22, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 07.02.2013
Сообщений: 49

Авторизация NTLM

25.06.2015, 10:56. Показов 4753. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Столкнулся с такой задачей:
Есть Windows с IIS и с PHP. Сервер находится в доменной сети, но сам в домен не введен (такие условия)...

Т.е. через IIS авторизировать по NTLM не получается (либо я чего-то не понял), но очень хочется что-бы пользователи не вводили ничего для доступа.
Вот отрыл вариант авторизации на PHP:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
header('Content-Type: text/html; charset=utf-8');
$headers = $_SERVER;   // получаем все заголовки клиента
if(!isset($headers['HTTP_AUTHORIZATION'])) { // если заголовка авторизации нет
  header('HTTP/1.1 401 Unauthorized');   // требуем от клиента авторизации
  header('WWW-Authenticate: NTLM');      // тип требуемой авторизации - NTLM
  exit;                                  // завершаем выполнение скрипта
}
$arr = [];
// заголовок авторизации от клиента пришёл
if (substr($headers['HTTP_AUTHORIZATION'],0,5) == 'NTLM ') { // проверяем, что это NTLM-аутентификация
  $chain = base64_decode(substr($headers['HTTP_AUTHORIZATION'],5)); // получаем декодированное значение
  switch (ord($chain{8})) { // смотрим номер этапа процесса идентификации
    case 3: // этап 5 - приём сообщения type-3
      foreach (array('LM_resp','NT_resp','domain','user','host') as $k=>$v) {
        extract(unpack('vlength/voffset',substr($chain,$k*8+14,4)));
        $val = substr($chain,$offset,$length);
        $arr[$v] = ($k<2 ? hex_dump($val) : iconv('UTF-16LE','UTF-8',$val));// . "<br>\r\n";
      }
      //exit;
    case 1: // этап 3 (тут было == 0xB2, я исправил на 130). 178 -> B2 или 130 -> 82
        // 0x82 возвращают мозилла и опера при обычном вводе руками, а 0xB2 возвращает IE при параметре "исользовать текущие логин и пароль"
      if (ord($chain{13}) == 0x82||ord($chain{13}) == 0xB2) { // проверяем признак NTLM 0x82 по смещению 13 в сообщении type-1:
        $chain = "NTLMSSP\x00".// протокол
                 "\x02" /* номер этапа */ ."\x00\x00\x00\x00\x00\x00\x00".
                 "\x28\x00" /* общая длина сообщения */ ."\x00\x00".
                 "\x01\x82" /* признак */ ."\x00\x00".
                 "\x00\x02\x02\x02\x00\x00\x00\x00". // nonce
                 "\x00\x00\x00\x00\x00\x00\x00\x00";
        header('HTTP/1.1 401 Unauthorized');
        header('WWW-Authenticate: NTLM ' . base64_encode($chain)); // отправляем сообщение type-2
        exit;
      }
  }
}
function hex_dump($str){ // вспомогательная функция, возвращает шестнадцатеричный дамп строки
    return substr(preg_replace_callback('#.#s', function($m) { return sprintf("%02x ",ord($m[0])); }, $str),0,-1);
}

Получаю логин, домен, и NT ответ, к примеру:
Кликните здесь для просмотра всего текста
[LM_resp] => 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[NT_resp] => 26 5f af 16 0d 8c f7 28 df b7 bd 2f a2 77 bc 78 01 01 00 00 00 00 00 00 0b aa e3 ee 1b af d0 01 3e b4 6b 7e e8 f6 5a 6d 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00
[domain] => somedomain
[user] => ii.ivanov
[host] => PC0102

Дальше по LDAP я могу найти этого пользователя и получить всю информацию о нем - всё работает,
только вот нет проверки что это подлинный пользователь (если в FireFox-е ввести неправильный пароль - тоже всё работает).

Вопрос: как проверить подлинность пользователя на PHP?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.06.2015, 10:56
Ответы с готовыми решениями:

Ntlm-авторизация
Добрый день! Вот СБ озадачило меня очердным вопросом. Можно ли и если да, то где и как настроить в лоутс клиенте NTLM-авторизацию. ...

NTLM авторизация
Добрый день Хочу подключиться к почте с доменной учеткой Exchange server Пользую библиотеку smtplib Метод s.login(login, passwd) не...

NTLM LDAP авторизация
Добрый день. На старом сервере (Centos 6.5, apache 2.2.29) была организована авторизация к определенным каталогам виртуального хоста апача,...

3
1 / 1 / 0
Регистрация: 07.02.2013
Сообщений: 49
26.06.2015, 18:24  [ТС]
Неужели никто не знает? (
0
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 1
31.03.2016, 13:50
Цитата Сообщение от wrun Посмотреть сообщение
Неужели никто не знает? (
Такая же проблема возникла, есть у кого нибудь решение ???
0
1 / 1 / 0
Регистрация: 07.02.2013
Сообщений: 49
03.04.2016, 20:53  [ТС]
Мы в результате ввели в домен (
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.04.2016, 20:53
Помогаю со студенческими работами здесь

WCF: Запрос HTTP не разрешен для схемы аутентификации клиента "Ntlm". От сервера получен заголовок аутентификации "NTLM ."
Добрый день! Борюсь с WCF. Цель- подключиться и работать с вебсервисом от Битрикса. Подключиться удалось,методы все видятся. ...

openfire + NTLM
Всем здравствуйте! Скажите, пожалуйста, используем openfire 3.7.0 в качестве jabber-server-a. Но поддерживает он NTLM-авторизацию только...

QNetworkAccessManager + ntlm
Использую в программе QNetworkProxy, и вот выяснилось что эта библиотека судя по всему не поддерживает ntlm аутентификацию на проксе. Может...

NTLM аутентификация на HTTP
Нарисовался вопросик: как можно, да и можно ли вообще посылать запросы в интернет через прокси(мой локальный прокси через который я...

WordPress и NTLM аутентификация
Подскажите как организовать в Wordpress NTLM аутентификацию?!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru