Если вы управляете несколькими сайтами на WordPress и хотите упростить процесс авторизации, то реализация единого входа (Single Sign-On, SSO) — отличное решение. Это позволит пользователям вводить логин и пароль один раз и получать доступ сразу ко всем сайтам без повторного ввода учетных данных. В этой статье разберем, как реализовать единый вход в экосистеме WordPress, рассмотрим популярные подходы, плагины и примеры кода.
Почему важен единый вход для WordPress мультисайтов и сети сайтов
Единый вход значительно упрощает работу с несколькими сайтами, объединенными общей аудиторией или командой. Он позволяет:
- Повысить удобство пользователей — не нужно каждый раз вводить логин и пароль.
- Обеспечить централизованное управление доступом и ролями.
- Снизить риск ошибок при вводе пароля и тем самым повысить безопасность.
- Упростить интеграцию с корпоративными системами единой аутентификации.
Для WordPress есть два основных сценария: мультисайт (Multisite) и отдельные независимые сайты. В мультисайте единый вход реализован из коробки, но для разных сайтов — задача сложнее.
Реализация единого входа в WordPress Multisite
WordPress Multisite — это встроенная в WordPress сеть сайтов, где все сайты используют общую базу пользователей. В этом случае:
- Одна учетная запись действует на всех сайтах.
- Пользователь входит на любом сайте, и сессия действует на всей сети.
Чтобы включить Multisite, достаточно добавить в wp-config.php строку:
define('WP_ALLOW_MULTISITE', true);
После активации сети настройте сеть из админки. В мультисайте единый вход и сессии работают автоматически благодаря cookie с областью домена. Главное, чтобы сайты были на одном домене или поддоменах.
Настройка cookie для мультисайта
Для корректной работы сессий можно в wp-config.php задать домен для cookie, например:
define('COOKIE_DOMAIN', '.example.com');
Это позволит cookie быть доступным на всех поддоменах.
Единый вход для разных доменов и независимых WordPress сайтов
Если сайты расположены на разных доменах, задача сложнее — cookie не работают между доменами. Решения делятся на несколько вариантов:
- Использовать SSO через внешние сервисы (OAuth, SAML).
- Реализовать централизованную аутентификацию с помощью базы данных или REST API.
- Использовать плагины, которые синхронизируют сессии.
Плагин MiniOrange SSO или WordPress SAML Single Sign On
Эти плагины позволяют настроить SSO через протокол SAML или OAuth, подключая сайты к единой системе аутентификации. Это удобный способ для корпоративных клиентов и организаций.
Подробнее и купить поддержку можно на wpshop.ru.
Пример реализации простого SSO через REST API и куки
Рассмотрим упрощенный пример, когда есть главный сайт с базой пользователей, и несколько второстепенных. При входе на главный сайт создается токен, который передается и проверяется на других сайтах.
Шаг 1. Генерация токена на главном сайте
function wplogin_generate_sso_token($user_id) {
$secret = 'секретная_строка';
$token = base64_encode(hash_hmac('sha256', $user_id . time(), $secret, true));
return $token;
}
Шаг 2. Передача токена во второстепенный сайт
При переходе на второстепенный сайт, токен передается через GET-параметр или POST, например:
https://site2.com?sso_token=TOKEN&user_id=USER_ID
Шаг 3. Проверка токена на второстепенном сайте
function wplogin_validate_sso_token($user_id, $token) {
$secret = 'секретная_строка';
$expected_token = base64_encode(hash_hmac('sha256', $user_id . 'пример_времени', $secret, true));
return hash_equals($expected_token, $token);
}
Если проверка успешна, используя wp_set_auth_cookie($user_id) можно авторизовать пользователя.
Использование плагина Clearfy Pro для управления сессиями и безопасностью входа
Плагин Clearfy Pro предоставляет удобные инструменты для контроля сессий, ограничения одновременных входов, блокировки подозрительных сессий и интеграции с другими системами. Его можно использовать для усиления безопасности при реализации единого входа.
Как синхронизировать роли и права пользователей между сайтами
При едином входе важно, чтобы роли пользователей были согласованы. В мультисайте роли можно назначать отдельно для каждого сайта, а при использовании отдельных сайтов — нужно синхронизировать пользователей и их права.
Для этого можно использовать WP REST API для передачи данных и хуки для автоматической синхронизации.
Пример синхронизации ролей через REST API
add_action('user_register', 'wplogin_sync_user_roles');
function wplogin_sync_user_roles($user_id) {
$user = get_userdata($user_id);
$roles = $user->roles;
$api_url = 'https://site2.com/wp-json/custom/v1/sync_user';
wp_remote_post($api_url, [
'body' => [
'user_id' => $user_id,
'roles' => json_encode($roles),
]
]);
}
На принимающем сайте создайте эндпоинт, который обновит роли пользователя.
Заключение
Реализация единого входа в WordPress зависит от архитектуры ваших сайтов и требований к безопасности. Для мультисайта WordPress все просто и работает из коробки. Для нескольких доменов нужно использовать SSO через протоколы SAML/OAuth или писать собственные решения с API и токенами.
Используйте плагины, например, MiniOrange SSO, Clearfy Pro для усиления безопасности и удобства. При желании можно написать и кастомные решения с помощью REST API и хуков.
Такой подход значительно улучшит опыт пользователей и упростит управление несколькими сайтами.