Ви можете подумати, що просто автентифікація користувача в Active Directory була б досить простим процесом використання LDAP в PHP без необхідності бібліотеки. Але є багато речей, які можуть досить швидко ускладнити:
- Ви повинні підтвердити введення даних. Порожнє ім’я користувача / пароль буде передано інакше.
- Ви повинні переконатися, що ім'я користувача / пароль правильно кодуються під час прив’язки.
- Ви повинні шифрувати з'єднання за допомогою TLS.
- Використання окремих серверів LDAP для надмірності у випадку виходу з ладу.
- Отримання інформативного повідомлення про помилку, якщо аутентифікація не вдається.
Насправді в більшості випадків простіше використовувати бібліотеку LDAP, що підтримує вищезазначене. У кінцевому підсумку я перетворив власну бібліотеку, яка обробляє всі вищезазначені моменти: LdapTools (Ну, не тільки для аутентифікації, це може зробити набагато більше). Його можна використовувати наступним чином:
use LdapTools\Configuration;
use LdapTools\DomainConfiguration;
use LdapTools\LdapManager;
$domain = (new DomainConfiguration('example.com'))
->setUsername('username') # A separate AD service account used by your app
->setPassword('password')
->setServers(['dc1', 'dc2', 'dc3'])
->setUseTls(true);
$config = new Configuration($domain);
$ldap = new LdapManager($config);
if (!$ldap->authenticate($username, $password, $message)) {
echo "Error: $message";
} else {
// Do something...
}
Виклик автентифікації вище:
- Перевірте, що ні ім’я користувача, ні пароль не є порожніми.
- Переконайтесь, що ім’я користувача / пароль правильно закодовано (за замовчуванням UTF-8)
- Спробуйте інший сервер LDAP у випадку, якщо він не працює.
- Зашифруйте запит на аутентифікацію за допомогою TLS.
- Надайте додаткову інформацію, якщо вона не вдалася (тобто заблокований / вимкнений обліковий запис тощо)
Для цього теж є інші бібліотеки (наприклад, Adldap2). Однак я відчував себе вимушеним надати деяку додаткову інформацію, оскільки відповідь, на яку найбільше голосують, насправді є ризиком для безпеки, на який можна покластися, не робивши перевірки вводу та не використовуючи TLS.