Автоматический вход с использованием Active Directory и Windows Authentication
Мне удалось настроить и использовать несколько различных LDAP-плагинов (CoSign SSO, Simple LDAP Logon) для создания новых пользователей WordPress на основе пользователей Active Directory, но это все равно требует от них ручного входа для создания публикаций. Существует ли способ получать учетные данные пользователя из браузера и автоматически авторизовывать их при каждом посещении сайта WordPress? У меня настроен IIS с Windows Authentication, и URL-адрес указан в браузере как доверенный для отправки учетных данных.
Нужен ли для этого другой плагин или потребуется редактирование нескольких файлов WordPress?
Спасибо
При использовании Windows Authentication в IIS PHP может прочитать текущего аутентифицированного пользователя, который вошел в систему, из $_SERVER["LOGON_USER"];
Если эта переменная установлена и пользователь не получает запрос HTTP-аутентификации, можно предположить, что учетные данные пользователя верны. Таким образом, с помощью некоторого кода WordPress можно прочитать $_SERVER['LOGON_USER']
и, если пользователь не вошел в WP, автоматически авторизовать его под этим именем пользователя.
Разместите в файле функций темы или в файле MU-плагинов.
function auto_login() {
if (!is_user_logged_in() && isset($_SERVER['LOGON_USER'])) {
$user_login = $_SERVER['LOGON_USER'];
$user = get_userdatabylogin($user_login);
$user_id = $user->ID;
wp_set_current_user($user_id, $user_login);
wp_set_auth_cookie($user_id);
do_action('wp_login', $user_login);
}
}
add_action('init', 'auto_login');
Возможно, потребуется дополнительно настроить переменную $user_login
, чтобы получить правильное имя пользователя, соответствующее записи в таблице WordPress.

Если я включаю windows authentication, то получаю сообщение "Страница не может быть отображена, так как произошла внутренняя ошибка сервера". Нужно ли что-то делать дополнительно, кроме включения windows authentication?

Прежде всего, хочу поблагодарить вас за создание такой замечательной функции. У меня есть небольшая проблема с этой функцией: я могу автоматически входить в WordPress с помощью этого метода, но если я хочу выйти, выход не происходит. Мне нужна функциональность выхода из системы в этой функции, чтобы другой пользователь мог войти с того же компьютера.

Вы можете решить проблему с выходом из системы с помощью такого кода:
function auto_login() {
if ( !is_user_logged_in() && isset($_SERVER['LOGON_USER']) && my_logout_cookie_check() === false ) {
$user_login = $_SERVER['LOGON_USER'];
$user = get_userdatabylogin( $user_login );
$user_id = $user->ID;
wp_set_current_user( $user_id, $user_login );
wp_set_auth_cookie( $user_id );
do_action( 'wp_login', $user_login );
}
}
add_action( 'init', 'auto_login' );
add_action( 'wp_logout', 'my_logout_cookie' );
function my_logout_cookie() {
setcookie( 'logout', 'true' );
}
function my_logout_cookie_check() {
if( $_COOKIE['logout'] === 'true' )
return true;
else
return false;
}
И еще одна функция для удаления этой куки при входе:
add_action( 'wp_login', 'my_logout_cookie_destroy' );
function my_logout_cookie_destroy() {
setcookie( 'logout', 'false' );
}
Это решение не тестировалось. Возможны проблемы с установкой куки, если вывод страницы уже начался, но думаю, это можно относительно легко преодолеть.
