Я ищу способ аутентификации пользователей через LDAP с помощью PHP (с Active Directory, являющимся поставщиком). В идеале, он должен работать в IIS 7 ( adLDAP делает это на Apache). Кто-нибудь сделал что-то подобное, с успехом?
Импорт целой библиотеки кажется неэффективным, когда вам нужно всего лишь две строки кода …
$ldap = ldap_connect("ldap.example.com"); if ($bind = ldap_bind($ldap, $_POST['username'], $_POST['password'])) { // log them in! } else { // error message }
Я делаю это просто, передавая учетные данные пользователя ldap_bind ().
http://php.net/manual/en/function.ldap-bind.php
Если учетная запись может привязываться к LDAP, она действительна; если он не может, это не так. Если все, что вы делаете, это аутентификация (не управление учетной записью), я не вижу необходимости в библиотеке.
Вы могли бы подумать, что просто аутентификация пользователя в Active Directory будет довольно простым процессом с использованием LDAP на PHP без необходимости в библиотеке. Но есть много вещей, которые могут усложнить его довольно быстро:
В большинстве случаев проще использовать библиотеку 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... }
Вышеуказанный вызов аутентификации будет:
Для этого есть и другие библиотеки (такие как Adldap2). Тем не менее, я чувствовал себя достаточно уверенным, чтобы предоставить дополнительную информацию, поскольку самый опротестованный ответ на самом деле представляет собой угрозу безопасности, на которую можно положиться, без проверки ввода и использования TLS.
Мне нравится Zend_Ldap Class, вы можете использовать только этот класс в своем проекте без Zend Framework.
В PHP есть библиотеки: http://ca.php.net/ldap
PEAR также имеет несколько пакетов: http://pear.php.net/search.php?q=ldap&in=packages&x=0&y=0
Я тоже не пользовался, но я собирался в какой-то момент, и им показалось, что они должны работать.
Для тех, кто ищет полный пример, посмотрите http://www.exchangecore.com/blog/how-use-ldap-active-directory-authentication-php/ .
Я проверил это подключение к контроллерам домена Windows Server 2003 и Windows Server 2008 R2 с веб-сервера Windows Server 2003 (IIS6) и с сервера Windows Server 2012, на котором запущен IIS 8.