WordPress авторизация через LDAP: настройка и примеры кода

Авторизация пользователей WordPress через LDAP (Lightweight Directory Access Protocol) – распространённая задача для корпоративных сайтов и внутренних порталов. LDAP позволяет централизованно управлять учётными записями, что упрощает администрирование и повышает безопасность. В этой статье мы подробно разберём, как настроить авторизацию WordPress через LDAP, приведём примеры плагинов и кодовые решения для интеграции.

Что такое LDAP и зачем нужна интеграция с WordPress

LDAP – это протокол доступа к централизованным каталогам, часто используемый для хранения информации о пользователях, группах и их правах. В организациях, где уже есть LDAP-сервер (например, Microsoft Active Directory, OpenLDAP), логично использовать существующие учётные записи для входа в WordPress, чтобы избежать дублирования и упростить управление.

Интеграция WordPress с LDAP позволяет:

  • Использовать единую систему учётных записей;
  • Автоматически синхронизировать данные пользователя;
  • Повысить безопасность за счёт централизованного контроля;
  • Упростить процесс входа для сотрудников.

Реализовать такую интеграцию можно с помощью готовых плагинов или кастомного кода.

Популярные плагины для LDAP-авторизации в WordPress

1. Simple LDAP Login

Простой и надёжный плагин, который позволяет пользователям входить через LDAP. Поддерживает привязку учётных записей WordPress к LDAP, настройку поиска пользователей и групп.

Преимущества:

  • Легко настроить;
  • Поддерживает несколько LDAP баз;
  • Автоматическое создание пользователей при первом входе.

2. Active Directory Integration / LDAP Integration

Более функциональный плагин с возможностью синхронизации пользовательских атрибутов, групп и ролей. Подходит для сложных сценариев, где требуется тонкая настройка прав доступа.

3. MiniOrange LDAP Login

Коммерческий плагин с поддержкой LDAP, Active Directory, SAML и других протоколов аутентификации. Есть бесплатная базовая версия и расширенные платные функции.

Для корпоративных сайтов эти плагины часто решают задачу без дополнительного кода. Но если нужна кастомизация, рассмотрим пример реализации авторизации через LDAP с помощью PHP.

Пример кастомной реализации LDAP авторизации в WordPress

Для примера создадим функцию wpauth_ldap_authenticate, которая будет проверять логин и пароль пользователя через LDAP и создавать или обновлять учётную запись WordPress.

function wpauth_ldap_authenticate($username, $password) {
    $ldap_server = 'ldap://ldap.example.com';
    $ldap_dn = 'ou=users,dc=example,dc=com';

    // Подключаемся к LDAP серверу
    $ldap = ldap_connect($ldap_server);
    if (!$ldap) {
        return new WP_Error('ldap_error', 'Не удалось подключиться к LDAP серверу');
    }

    ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);

    // Формируем DN пользователя
    $user_dn = "uid={$username},{$ldap_dn}";

    // Пытаемся выполнить bind с учётными данными пользователя
    if (@ldap_bind($ldap, $user_dn, $password)) {
        // Успешная аутентификация
        // Проверяем существует ли пользователь в WordPress
        $user = get_user_by('login', $username);
        if (!$user) {
            // Создаём пользователя
            $user_id = wp_create_user($username, wp_generate_password(), "{$username}@example.com");
            if (is_wp_error($user_id)) {
                return $user_id;
            }
            $user = get_user_by('id', $user_id);
        }
        ldap_unbind($ldap);
        return $user;
    } else {
        ldap_unbind($ldap);
        return new WP_Error('invalid_credentials', 'Неверное имя пользователя или пароль');
    }
}

// Подключаем функцию к фильтру аутентификации
add_filter('authenticate', function($user, $username, $password) {
    if (empty($username) || empty($password)) {
        return null; // передать управление другим методам
    }
    $result = wpauth_ldap_authenticate($username, $password);
    if (is_wp_error($result)) {
        return null; // можно вернуть ошибку или null
    }
    return $result;
}, 20, 3);

В этом примере:

  • Подключение к LDAP серверу происходит через ldap_connect;
  • Пользовательский DN формируется по шаблону uid=логин,ou=users,dc=example,dc=com;
  • Для проверки пароля используется ldap_bind;
  • Если аутентификация успешна, проверяется наличие пользователя в WordPress, и при необходимости он создаётся с рандомным паролем;
  • Функция подключается к фильтру authenticate, который отвечает за вход в WordPress.

Тонкая настройка и синхронизация данных LDAP и WordPress

Синхронизация атрибутов пользователя

Часто нужно не просто аутентифицировать, а и синхронизировать данные, такие как email, имя, фамилия, роль. Для этого после успешного bind можно выполнить LDAP-запрос на получение атрибутов пользователя:

$attributes = ['mail', 'givenName', 'sn'];
$search = ldap_search($ldap, $user_dn, '(objectClass=person)', $attributes);
$entries = ldap_get_entries($ldap, $search);
if ($entries['count'] > 0) {
    $email = $entries[0]['mail'][0] ?? '';
    $first_name = $entries[0]['givenname'][0] ?? '';
    $last_name = $entries[0]['sn'][0] ?? '';
    wp_update_user([
        'ID' => $user->ID,
        'user_email' => $email,
        'first_name' => $first_name,
        'last_name' => $last_name
    ]);
}

Таким образом, данные пользователя в WordPress будут актуальными.

Назначение ролей по группам LDAP

Если в LDAP используются группы, можно присваивать роли WordPress на их основе. Для этого надо проверить членство пользователя в нужных группах:

$group_dn = 'cn=editors,ou=groups,dc=example,dc=com';
$filter = "(&(objectClass=groupOfNames)(member={$user_dn}))";
$search = ldap_search($ldap, $group_dn, $filter);
$entries = ldap_get_entries($ldap, $search);
if ($entries['count'] > 0) {
    $user->set_role('editor');
} else {
    $user->set_role('subscriber');
}

Это позволяет гибко управлять доступом без ручного вмешательства.

Рекомендации и особенности при работе с LDAP в WordPress

При настройке LDAP авторизации важно учитывать несколько моментов:

  • Безопасность подключения. Используйте LDAPS (порт 636) или StartTLS для шифрования данных. В противном случае логины и пароли передаются открытым текстом.
  • Кэширование. LDAP-запросы могут быть затратными. Для повышения производительности стоит кэшировать результаты.
  • Обработка ошибок. Всегда проверяйте ошибки подключения и авторизации, чтобы не блокировать пользователей из-за временных сбоев LDAP.
  • Логирование. Ведите логи попыток входа для аудита и отладки.
  • Тестирование. Проверяйте работу на тестовом сервере, чтобы не потерять доступ к сайту.

Интеграция с плагинами WPGPT и Clearfy Pro

Если вы используете WPGPT для расширения функционала сайта, LDAP авторизация позволит быстрее и безопаснее предоставлять доступ к персонализированным функциям ИИ. Clearfy Pro поможет оптимизировать безопасность и производительность сайта с учётом LDAP интеграции.

Оба плагина доступны на wpshop.ru.

WordPress REST API: создание кастомной аутентификации по токену
25.01.2026
WordPress авторизация с использованием WebAuthn: настройка и практические примеры
12.03.2026
Кастомизация процесса восстановления пароля в WordPress: пошаговое руководство
03.03.2026
WordPress кастомные сообщения об ошибках при входе: настройка и примеры
01.12.2025
WordPress кастомные редиректы после входа: настройка и практические примеры
13.11.2025