Главная


LDAP и PHP

php ldap В этой статье, хочу рассказать, как я столкнулся лицом к лицу с LDAP сервером. Сейчас в вкратце, что такое LDAP?
LDAP — это протокол для доступа к ресурсам, который позволяет пользователю авторизоваться, провести поиск по записям, изменить или удалить их. Используется для хранения данных по пользователям.
По умолчанию использует 389 порт. Записи в LDAP расположены по уникальным DN(Distinguished Name) именам. Имя состоит из одного или нескольких уникальных имен, разделенных запятой. Например, "cn=Slan, ou=IT, dc=slan-gallery, dc=com". По этому DN имени можно получить список записей с сервера. Для поиска записей по заданным условиям используются фильтры("(&(objectCategory=person)(objectClass=user) (CN=*))").

    Просмотреть данные в LDAP, можно используя PhpLdapAdmin. С его помощью, можно просмотреть дерево DN-ов и находящиеся в нем записи.

    В PHP есть стандартные функции для взаимодействия с LDAP сервером. Ниже, привожу простенький скрипт, который выполняет авторизацию, поиск и вывод записей по заданному фильтру.
$_connection = ldap_connect("slan-gallery.com");
if ($_connection)
      {
          $ldapbind = ldap_bind($_connection, "user_login", "user_password");
          if ($ldapbind) {
              $_search = ldap_search($_connection, "OU=IT,DC=slan-gallery,DC=com", "(&(CN=*))", array("*"), 0, 0, 10);

              if ($_search) {
                          $data = ldap_get_entries($_connection, $_search);
                foreach($data as $value){
                    if(is_array($value)) {
                        if(array_key_exists('employeenumber', $value)) {
                  echo $value['cn'][0]."<br/>";
                        }
                    }
                }
              }
          }
ldap_close($_connection);
      }


    Этот скрипт авторизует пользователя "user_login" с паролем "user_password"  на сервер "slan-gallery.com". Далее по DN "OU=IT,DC=slan-gallery,DC=com" производится поиск с фильтром "(&(CN=*))" и выбираются все атрибуты.

    Получить ошибки в LDAP можно с помощью ldap_error($_connection), передав в нее подключение. LDAP сервер, по умолчанию, выдает 1000 записей, это установлено атрибутом MaxPageSize в настройках сервера. По этому если на сервере больше записей, чем установлено атрибутом MaxPageSize, используем постраничный вывод результатов. Используя ldap_first_entry( $_connection, $_search ) и ldap_next_entry( $_connection, $_search ), передавая в них подключение и результат ldap_search.

Комментарии