- Подключение к AD из PHP по протоколу LDAPS
- Php доменная авторизация windows
- ИТ решения, настройка серверов Linux, Asterisk
- PHP авторизация LDAP через Active Directory для Asterisk CDR Viewer
- Безопасность
- получить имя текущего авторизованного в домен Active Directory пользователя средствами PHP
- Saratov64
- Простая авторизация и аутентификация на PHP в связке с MySQL
- Создание объектов в базе данных
- Создание формы регистрации
- Создание формы авторизации
Подключение к AD из PHP по протоколу LDAPS
Прочитав пост Создаем пользователя AD через веб-интерфейс, вспомнил, что около года назад занимался с аналогичной задачей. Проблема была в том, что не удавалось создать пользователя при соединении по протоколу LDAP, а получилось только по протоколу LDAPS. Выкладываю свои записи, вдруг кому пригодится.
Все действия проделывались в RHEL 5.5 и Windows Server 2003 R2 EE.
Сертификаты
Потребуется пакет OpenSSL
Сертификаты для контроллеров домена
При запросе **Common Name (eg, your name or your server’s hostname) []:** нужно обязательно ввести FQDN DC для которого создаем сертификат.
PHP должен быть с поддержкой ldap
Файл /etc/openldap/ldap.conf
Установка сертификатов на DC
1. Копируем на сервер файлы
* cert.p12 — The certificate
* cacert.pem — The Root Certificate
2 .Start, Run, MMC, File, Add/Remove Snap-in, Add, Certificates, Computer Account, Local Computer, My User Account, Next, Finish, Close, Ok
3. Разворачиваем Certificates
4. Импортируем cacert.pem в Trusted Root Certificates Authorities (правой кнопкой на Trusted Root Certificates Authorities, All Tasks, Import, Next, Browse, All files, выбираем наш cacert.pem . )
5. Импортируем cert.p12 в Personal (правой кнопкой на Personal, All Tasks, Import, Next, Browse, All files, находим наш cert.p12, если нужно вводим пароль . )
6. Проверяем сертифика на DC
* Разворачиваем папки Personal и Certificates
* Двойной щклчок по установленному сертификару
* Убеждаемся, что есть строка «You have a private key that corresponds to this certificate»
Проверка сзязи
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Php доменная авторизация windows
Здесь рассмотрим выполнение сквозной авторизации пользователя в Active Directory C получением параметров пользователя.
Необходимым условием является наличие пользователя в домене, т.е. пользователь не прописанный в домене не пройдет авторизацию.
Прежде всего необходимо установить соединение нашего php-скрипта с доменом.
Подразумевается, что в AD прописан не только пользователь, но и компьютер пользователя.
Часто в описании пользователя отсутсвует привязка к компьютеру, – этот скрипт проверяет сведения о компьтере в домене и вытягивает всю необходимую информацию.
Сделаем это следующим образом:
1. Получаем имя удаленного хоста, при входе пользователя на страницу.
2. Поскольку полученное имя может быть длинее 15 символов (а именно столько позволяет внести NETBIOS-имя), – обрезаем до необходимой длнины, убираем все символы после первой точки (т.к. полученное имя имя будет иметь формат “логин.субдомен.домен”) и в переменную “текущий пользователь” берем результат, добавляя к нему спецсимвол “$”.
3. Устанавливаем соединение с доменом.
Для этого используем пару “логин-пароль” имеющие права считать информацию из AD.
Получение информации из домена разделим на две составляющие: информация о компьютере и информация о пользователе.
4. Извлечение информации о копьютере.
Эту операцию выполнит следующий код:
5. Извлечение информации о пользователе (в качестве продолжения кода приведенного в п.4)
Выше приведенный способ я использовал по причине запрета доменной политикой использования в браузере ActiveX.
Если же ActiveX у вас разрешен – можно использовать другой способ извлечения из AD информации о пользователе посетившем web-страницу, приведенный ниже:
ИТ решения, настройка серверов Linux, Asterisk
Настройка и администрирование Windows и Linux, телефония Asterisk, готовые решения и услуги аутсорсинга.
PHP авторизация LDAP через Active Directory для Asterisk CDR Viewer
В этой статье мы прикрутим авторизацию через Active Directory к Asterisk CDR Viewer используя PHP скрипт. Это решение актуально для авторизации корпоративных пользователей, которым нужно предоставить доступ к какому-то web ресурсу внутри сети на основе присутствия пользователя в группе в домене AD. Вы можете легко переделать скрипт под свои нужны и использовать для доступа к подобным сервисам или страничкам.
Для использования нужных функций нам понадобится установить модуль php-ldap.
Далее мы создадим группу в AD с именем Статистика Asterisk и включим в неё всех пользователей, которым необходим доступ.
Итак, сначала создадим файл ldap.php в папке Asterisk CDR Viewer. В нем опишем настройки доступа к AD серверу:
Чтобы при обновлении страницы не приходилось проходить авторизацию повторно мы сохраним данные в сессии пользователя. Для этого я использовал класс AuthClass который взял отсюда и внес свои изменения.
Для проверки авторизации используется функция login(), которая получает логин и пароль при заполнении формы. В случае ввода правильных данных происходит переадресация на основой файл index.php. За авторизацию у нас будет отвечать файл auth.php в той же папке:
В файл index.php (Asterisk CDR Viewer) вверху нужно добавить код, который будет проверять авторизован ли пользователь (смотреть переменную сессии) и отправлять на форму ввода имени и пароля в случае, если пользователь не авторизован (переменная сессии не установлена).
Ну и стили для формы авторизации у меня получились такие:
./img/auth.css
Осталось добавить ссылку для выхода из статистики вверху страницы. Для этого открываем файл ./templates/header.php и вписываем следующий код внизу перед последним закрывающим тегом
Следует добавить, что время активности сессии по умолчанию составляет 24 минуты. По прошествии этого времени пользователю нужно будет заново пройти авторизацию. В моём случае этого времени достаточно, но если вы хотите увеличить время, можете изменить настройки php.ini на вашем сервере, либо добавить в код такую функцию: ini_set(‘session.gc_maxlifetime’, 86400); Это увеличит время до 1 суток.
Безопасность
Для того, чтобы пароли не передавались в открытом виде, доступ к статистике нужно предоставить по HTTPS протоколу (сгенерировать SSL сертификат) и разрешить только нужную подсеть (или диапазона адресов) средствами web сервера и/или файрвола.
В идеале пустить трафик от сервера со статистикой до AD сервера через отдельную недоступную подсеть (или vpn) для того, чтобы имена и пароли для авторизации не смогли перехватить.
получить имя текущего авторизованного в домен Active Directory пользователя средствами PHP
Saratov64
Новичок
Вообщем, одолел я авторизацию моего web приложения в домене виндовом, через протокол LDAP, выброс формы, и вводим логин и пароль, проверяем, юзера и группу, все работает.
как теперь узнать ИМЯ текущего пользователя, который залогинелся. и автоматически входит на веб ?
как я понимаю PHP это серверный язык, и он не работает на клиенте?
нашел такие разделы, NTLM авторизацию в AD
Но как я понимаю скрипт для АПАЧА
мое приложение крутиться на ms IIS server
значит, нужно, что-то, что может вытащить текущую учетку ?
На просторах, нета нашел для IIS сервера решение
В результате получаю имя пользователя в виде: MYDOMAIN\user.name
Есть только одно НО! Чтобы это решение действительно заработало, Вам придется отказаться от другого типа аутентификации на сайте (т.е. только через AD).
Вот что нужно сделать в IIS: у сайта в настройках аутентификации (Authentication) включаете (Enable) «Windows Authentication» и обязательно (!) отключаете анонимный доступ (Anonymous authentication).
В IE и Chrome заработает сразу, а FireFox нужно будет сначала поставить это дополнение и прописать сайт в доверенные: https://addons.mozilla.org/ru/firefox/addon/integrated-auth-for-firefox/
Но далее вопрос, я не владелец хостинга, не администратор, и возможно мне откажут, в отключении анонимности входа, так как я понял, все страницы, на этом IIS сервере крутяться с анонимным входом.
Простая авторизация и аутентификация на PHP в связке с MySQL
Все кто разрабатывает web сайты, рано или поздно сталкивается с такой задачей как авторизация и аутентификация пользователей, реализованная именно с помощью языка программирования, а не с помощью стандарта протокола http. Сегодня мы рассмотрим пример создания простой авторизации с использованием языка программирования PHP, а данные о пользователях будем хранить в базе MySQL.
Приведенный ниже способ является простым или как бы основой для создания нормальной авторизации, но его Вы вполне можете использовать, так как он достаточно хорошо работает, также Вы сами можете улучшить этот способ и внедрить у себя на сайте.
Данный способ основан на сессиях, но я здесь применяю и куки, для того чтобы браузер запоминал пользователя, который аутентифицировался прошлый раз, чтобы каждый раз не вводить логин, можно конечно хранить в куках и пароль, но это не безопасно, даже если он зашифрован. Для того чтобы сессия закончилась, просто закройте браузер и откройте заново.
Создание объектов в базе данных
Переходим к практике. Для начала создадим таблицу хранения данных о пользователях в базе MySQL. Я предлагаю использовать простую структуру таблицы (Вы ее, конечно, можете дополнить чем-нибудь, у меня база называется test, а таблица users):
И давайте сразу же добавим одну запись в эту таблицу:
Итого у нас получилось:
- Логин – mylogin;
- Пароль — 202cb962ac59075b964b07152d234b70;
Мы пароль, конечно же, будем хранить в хешированном виде, так как хранить пароль в открытом виде, мягко сказать, не безопасно. У нас Выше хеш пароля 123, поэтому, когда будем вводить пароль в форму, мы будем забивать именно 123, а не 202cb962ac59075b964b07152d234b70.
Создание формы регистрации
Для того чтобы пользователь мог сам зарегистрироваться, сделайте форму, данные с которой будут посылаться на файл обработки регистрации, т.е. записываться в базу данных. Например, вот самый простой способ:
Кстати, при таком способе лучше всего для логина использовать латинские буквы (т.е. английские), если хотите писать логин на русском, то придется немного корректировать код. Файл можете назвать как угодно (для теста я использовал reg.html).
Примечание! Для тестирования я использую всего один файл, я его назвал mylogin.html (код файла ниже). Вы можете использовать в своих файлах и называть их как угодно, я здесь описываю сам процесс авторизации, поэтому применить его можно везде. Кстати, во всех файлах придется использовать функцию session_start(); для того чтобы Вы могли проверять авторизован пользователь или нет. И еще один момент, конечно же, пропишите свои настройки подключения к базе данных.
Создание формы авторизации
Теперь перейдем непосредственно к самой авторизации. Создайте файл с названием mylogin.html со следующим содержанием:
Примечание! Если вдруг у Вас отказывает работать парсер php, т.е. на экран Вам выводится сам код php, то у Вас просто на всего не включена обработка php в файлах html. Настройки делаются в файле конфигурации web сервера httpd.conf (если apache):
В IIS в окне «Добавление сопоставления модуля» (Add Module Mapping) добавьте к *.php еще и *.html через запятую. Это если Вы делаете у себя дома на своем web сервере, а если Вы все это делаете у хостера, то Вам придется писать им и просить внести необходимые изменения, у некоторых хостеров они уже сделаны.
Код я прокомментировал, поэтому я думаю, что все должно быть понятно. Еще раз напоминаю во всех файлах, содержимое которых Вы не хотите показывать не авторизованным пользователям, необходимо писать session_start, ну и, наверное, на этом все. Если есть вопросы, задавайте в комментариях. Удачи!