Аутентификация пользователя с помощью LDAP с PHP

Мой проект состоит в том, чтобы создать систему регистрации модулей для нашего университета. Поэтому я связался с ИТ-специалистами в своем университете для получения подробностей, чтобы проверить подлинность учащихся в системе. Мы разрабатываем систему, используя существующую регистрацию в университете. Они дали мне некоторую информацию LDAP, я не знаю, как это использовать. Я использую PHP, Mysql на сервере Apacha. Как я могу аутентифицировать пользователя, регистрирующегося в моей системе, учитывая его идентификатор пользователя и пароль с информацией LDAP.

Ниже приведена информация LDAP (я изменил имя домена и т. Д.),

Информация LDAP для домена blueroom.ac.uk


LDAP Host : ad.blueroom.ac.uk LDAP port no: 389 BASE DN : ou=bluebird, dc=bluebird, dc=ac, dc=my LDAP account to bind : cn = kikdap, ou=servacc, dc=bluebird,dc=ac,dc=uk LDAP account password : ******** Attribute : sAMAccountName 

Общая процедура была бы (соответствующие команды ext / ldap php в скобках):

  1. подключитесь к LDAP-серверу с помощью «LDAP Host» и «LDAP port no» ( ldap_connect () ) и установите правильные параметры подключения ( ldap_set_option () ), особенно LDAP_OPT_PROTOCOL_VERSION и LDAP_OPT_REFERRALS

  2. привязать к LDAP-серверу, используя «учетную запись LDAP для привязки» и «пароль учетной записи LDAP» ( ldap_bind () ). Если вы проверяете подлинность на сервере Active Directory, вы можете напрямую использовать имя пользователя и пароль со страницы входа и пропустить все следующие шаги.

  3. найдите дерево для соответствующей пользовательской записи / объекта, указав «BASE DN» и соответствующий фильтр LDAP – скорее всего, что-то вроде (&(objectClass=user)(sAMAccountName=%s)) где %s следует заменить на имя пользователя для аутентификации ( ldap_search () )

  4. проверьте, если количество возвращаемых записей равно 1 (если <> 1, то что-то пошло не так, например, не найдено ни одного пользователя или нескольких пользователей)

  5. выведите отличительное имя (DN) этой единственной записи ( ldap_get_dn () )

  6. используйте DN, найденный на последнем шаге, чтобы попытаться связать с сервером LDAP пароль, указанный на странице аутентификации ( ldap_bind () )

  7. если привязка завершается успешно, тогда все в порядке, если нет, скорее всего пароль неверен

Это действительно не так сложно, как кажется сначала. Обычно я предлагаю использовать некоторую стандартную библиотеку для аутентификации на сервере LDAP, таком как Net_LDAP2 PEAR Zend_Ldap или Zend_Ldap из Zend Framework . У меня нет опыта использования Net_LDAP2 (хотя я знаю код довольно хорошо), но Zend_Ldap работает с серверами Active Directory или серверами ADAMS (что очевидно, с чем вы работаете).

Это сделает трюк с помощью Zend_Ldap :

 $options = array( 'host' => 'ad.blueroom.ac.uk', 'useStartTls' => true, 'accountDomainName' => 'blueroom.ac.uk', 'accountCanonicalForm' => 4, 'baseDn' => 'ou=bluebird,dc=bluebird,dc=ac,dc=my', ); $ldap = new Zend_Ldap($options); try { $ldap->bind('user', 'password'); } catch (Zend_Ldap_Exception $e) { // something failed - inspect $e } // bind successful $acctname = $ldap->getCanonicalAccountName('user', Zend_Ldap::ACCTNAME_FORM_DN); 

Вы можете попробовать http://code.activestate.com/recipes/101525/ , ссылаясь на http://us3.php.net/ldap и другие результаты поиска Google для [php ldap authentication] .

вы можете использовать http://pear.php.net/package/Net_LDAP2/docs, это приятно и работает.

Пример подключения, предпринятый документом:

 // Inclusion of the Net_LDAP2 package: require_once 'Net/LDAP.php'; // The configuration array: $config = array ( 'binddn' => 'cn=admin,ou=users,dc=example,dc=org', 'bindpw' => 'password', 'basedn' => 'dc=example,dc=org', 'host' => 'ldap.example.org' ); // Connecting using the configuration: $ldap = Net_LDAP2::connect($config); // Testing for connection error if (PEAR::isError($ldap)) { die('Could not connect to LDAP-server: '.$ldap->getMessage()); } 

@Stephen предоставил хорошие очки. Вот мой простой PHP-код для аутентификации с использованием AD:

  1. сначала вам нужно знать эти параметры: серверный хост, домен пользователя (вам также нужна база dn, если вы хотите получить запрос AD).
  2. используйте следующий код:

     $ldap = ldap_connect($host); // eg 165.5.54.6 or an URL ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); // Recommended for AD ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); $bind = ldap_bind($ldap, $username.'@'.$userDomain, $passwrod); if($bind){ // successful authentication. }