Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > Прозрачная авторизация Apache+AD+Win2003


Автор: wekapl 29.6.2016, 14:57
Доброго времени суток!

Ситуация:
Есть сайт на php. Cервер OpenServer на Win2003, Apache. Сервер в домене
наcтроена авторизация на сайте через LDAP. Пользователь входить на свой ПК в домене, заходит на сайт по https,  вводит свои доменные данные и в зависимости от логина получает доступ к определенным страницам

Нужно:
Чтобы пользователь входил на свой ПК в домене, заходил на сайт и в зависимости от логина получал доступ к определенным страницам, то есть необходима "сквозная" авторизация.

Совсем нет опыта в этой тематике. Прочитав пол интернета, ничего не понятно. 
Подскажите хоть в какую сторону копать. Где выцепить имя авторизовавшегося пользователя?

Автор: ksnk 29.6.2016, 16:33
был как то такой модуль mod_ntlm. Он работал на сервере с Windows 2000.

Есть способ добраться до ldap сервера и спросить у него в какой группе находится юзер - http://eddnet.org/?p=628 . Таким образом - можно раскрасить пользователей по правам - просто создать на сервере дерево фиктивных групп и наподключать туда пользователей. По полученным именам групп на web-сервере уже раздавать права пользователям.

Собственно запросить пароль и имя можно с помощью http://php.net/manual/ru/features.http-auth.php.

Автор: wekapl 29.6.2016, 16:43
сейчас та реализована как раз авторизация. пользователь вводит логин пароль -> проверка в лдап 
распределение ролей у меня средствами базы данных сделано.

идея в том, чтобы не спрашивать у пользователя логин пароль при входе на сайт.

Добавлено через 12 минут и 9 секунд
модулm mod_ntlm вроде как в среде Unix работает. Попытки были на вин2003 не удачные:(

Автор: ksnk 4.7.2016, 17:45
Случайно наткнулся в phpmailer 
https://github.com/PHPMailer/PHPMailer/
на ссылку на `NTLM client`. Дальнейшие разборки вывели на проект
http://www.phpclasses.org/package/1888-PHP-Single-API-for-standard-authentication-mechanisms.html

Проект 2004 года, но протоколы, вроде, не менялись...
В самом phpmailer можно посмотреть на пример аутентификации с использованием этого класса

Автор: ksnk 6.7.2016, 13:39
Все примеры, как оказалось, направлены на получение информации из  NTLM-рессурса, Пример авторизации простой браузерной странички там отсутствует. Для этого нужно эмулировать сервер, а не клиент. К тому же в течении времени протоколы таки изменились, и эмуляцию NTLMv2 найти в кодах оказалось не очень просто. 

Итого - https://gist.github.com/Ksnk/cea7c5dea4491952ea9de358d025bd75
http://ksnk.500mb.net/fly/ntlm.php 
Пример авторизации с логином и логаутом. 

оформлять в виде отдельного проекта, полагаю, рановато, по этому так, как уж получилось. Запустить можно хоть в Шторме, пункт "открыть в броузере", или разместить на сервере. 
Вход :
WEB-server\Юзер   
Пароль

NTLM - это целый пучёк (4 штуки) разных способов кодирования, некоторые из них уже признаны плохими, и только NTLMv2 еще немножко держится. Мой скрипт поддерживает только v2, так что с более старыми клиентами, чем Хром и IE9++ возможны глюки.

Есть сомнения в реальной пользе и применимости такой авторизации, хотя можно отметить, что
  •  передается имя компьютера, это можно использовать в каких то целях.
  •  так как пароль не передается открыто, при отсутствии https получается какая то дополнительная защита.

Автор: wekapl 2.8.2016, 15:02
Спасибо, все смотрю


Смысл та как раз в том, чтобы не в водить логин/пароль.
В каких переменных окружения должно лежать имя доменного пользователя?

Автор: _zorn_ 2.8.2016, 19:11
А по мне, если ужа с ежом скрещивать, то и получится херня. Раз почти весь стек на винде то и делайте на IIS.

Автор: wekapl 3.8.2016, 08:49
_zorn_, 
К сожалению реальность не всегда совпадает с желаниями. 
Платформа только такая, максимум на что мне можно двинуться - попытаться сервер до винды 2008 поднять, соответственно и апач до 2.4.

Но попытки развернуть сервер на вин7 тоже не выдают нужную переменную:(

Добавлено через 7 минут и 12 секунд
Цитата(ksnk @  29.6.2016,  16:33 Найти цитируемый пост)
был как то такой модуль mod_ntlm. Он работал на сервере с Windows 2000.

Есть способ добраться до ldap сервера и спросить у него в какой группе находится юзер - http://eddnet.org/?p=628 . Таким образом - можно раскрасить пользователей по правам - просто создать на сервере дерево фиктивных групп и наподключать туда пользователей. По полученным именам групп на web-сервере уже раздавать права пользователям.

Собственно запросить пароль и имя можно с помощью HTTP-аутентификации.



В лдап без имени пользователя нет смысла лесть. Запросить логин пароль нет проблемы и с помощью банальной формы, и через SSPI  прекрасно запрашивается. Смысл в сквозной авторизации - без запроса от пользователя логина.

Устанавливаю и модуль NTML и SSPI, не появляется как заявлено переменная REMOTE_USER

Автор: wekapl 3.8.2016, 09:12
после установки модуля в переменной SERVER_SOFTWARE ниче не меняется как была только версия апач так и есть
по идее должен и модуль прописаться

Может банально модуль не встает?

Автор: ksnk 10.8.2016, 12:24
Цитата(wekapl @  2.8.2016,  15:02 Найти цитируемый пост)
В каких переменных окружения должно лежать имя доменного пользователя? 

Они передаются каждый раз, при доступе к страничке. Информация находится в заголовке Authorization. Она там упакована довольно загадочным образом, однако в коде можно эту загадочность разглядывать. Имя компьютера и имя пользователя не зашифрованы, пароль зашифрован. 

Проблема с моим кодом в том, что сервер сам обязан знать пароль пользователя, так как в открытом виде пароль не передается. Так что кросс-ldap, по моему коду, работать не будет, сервер обязан сам знать пароль (или его md4* хеш).

А по модулю - вероятно, что то не работает. phpinfo, обычно, выдает список модулей, может там посмотеть стартовал или нет?

Автор: _zorn_ 27.8.2016, 14:20
Цитата(wekapl @  3.8.2016,  15:49 Найти цитируемый пост)
Платформа только такая, максимум на что мне можно двинуться - попытаться сервер до винды 2008 поднять, соответственно и апач до 2.4.

При чем тут версия винды и апач ? Слово "соответственно" не очень понятно.
Почему "платформа только такая" ? Недостаток финансов ?
Почему не nginx+php-fpm ? (это конечно стёб  smile )

PS. пхп что под апачем, что под IIS одинаково будет работать  smile  Но мне кажется что в IIS можно наколупать решение для вашей проблемы более удачное, чем костылить.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)