Можно было бы подумать, что просто аутентификация пользователя в 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...
}
Проверять подлинность вызова выше будет:
- Validate, что ни имя пользователя или пароль пуст.
- Убедитесь, что имя пользователя/пароль правильно закодировано (UTF-8 по умолчанию)
- Попробуйте использовать альтернативный сервер LDAP в случае, если один из них выключен.
- Шифровать запрос аутентификации с использованием TLS.
- Предоставить дополнительную информацию, если она не удалась (то есть. Заперто/отключенная учетная запись, и т.д.)
Есть другие библиотеки, чтобы сделать это тоже (Такие, как Adldap2). Тем не менее, я чувствовал себя достаточно уверенным, чтобы предоставить дополнительную информацию, поскольку самый опротестованный ответ на самом деле представляет собой угрозу безопасности, на которую можно положиться, без проверки ввода и использования TLS.
Я думаю, что у drupal есть модуль для этого – redben 2010-06-20 11:29:03