| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Администрирование 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++ возможны глюки. Есть сомнения в реальной пользе и применимости такой авторизации, хотя можно отметить, что
|
| Автор: wekapl 2.8.2016, 15:02 |
| Спасибо, все смотрю Смысл та как раз в том, чтобы не в водить логин/пароль. В каких переменных окружения должно лежать имя доменного пользователя? |
| Автор: _zorn_ 2.8.2016, 19:11 |
| А по мне, если ужа с ежом скрещивать, то и получится херня. Раз почти весь стек на винде то и делайте на IIS. |
| Автор: wekapl 3.8.2016, 09:12 |
| после установки модуля в переменной SERVER_SOFTWARE ниче не меняется как была только версия апач так и есть по идее должен и модуль прописаться Может банально модуль не встает? |
| Автор: ksnk 10.8.2016, 12:24 | ||
Они передаются каждый раз, при доступе к страничке. Информация находится в заголовке Authorization. Она там упакована довольно загадочным образом, однако в коде можно эту загадочность разглядывать. Имя компьютера и имя пользователя не зашифрованы, пароль зашифрован. Проблема с моим кодом в том, что сервер сам обязан знать пароль пользователя, так как в открытом виде пароль не передается. Так что кросс-ldap, по моему коду, работать не будет, сервер обязан сам знать пароль (или его md4* хеш). А по модулю - вероятно, что то не работает. phpinfo, обычно, выдает список модулей, может там посмотеть стартовал или нет? |
| Автор: _zorn_ 27.8.2016, 14:20 | ||
При чем тут версия винды и апач ? Слово "соответственно" не очень понятно. Почему "платформа только такая" ? Недостаток финансов ? Почему не nginx+php-fpm ? (это конечно стёб PS. пхп что под апачем, что под IIS одинаково будет работать |