Автоматический вход с использованием Active Directory и Windows Authentication

13 июл. 2011 г., 21:36:24
Просмотры: 22.3K
Голосов: 3

Мне удалось настроить и использовать несколько различных LDAP-плагинов (CoSign SSO, Simple LDAP Logon) для создания новых пользователей WordPress на основе пользователей Active Directory, но это все равно требует от них ручного входа для создания публикаций. Существует ли способ получать учетные данные пользователя из браузера и автоматически авторизовывать их при каждом посещении сайта WordPress? У меня настроен IIS с Windows Authentication, и URL-адрес указан в браузере как доверенный для отправки учетных данных.

Нужен ли для этого другой плагин или потребуется редактирование нескольких файлов WordPress?

Спасибо

0
Все ответы на вопрос 2
2

При использовании 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.

14 июл. 2011 г. 20:06:23
Комментарии

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

Naeem Sarfraz Naeem Sarfraz
15 нояб. 2011 г. 21:11:34

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

User User
10 янв. 2012 г. 11:44:10
2

Вы можете решить проблему с выходом из системы с помощью такого кода:

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' );
}

Это решение не тестировалось. Возможны проблемы с установкой куки, если вывод страницы уже начался, но думаю, это можно относительно легко преодолеть.

10 янв. 2012 г. 12:04:44
Комментарии

Интересно. Я независимо пришел примерно к такому же решению, но ломаю голову, почему вызов setcookie() в my_logout_cookie() на самом деле не устанавливает куки...

Kirby Kirby
16 мая 2015 г. 02:58:23

Вместо использования куков я начал сессию и сохранил флаг в $_SESSION

Kirby Kirby
16 мая 2015 г. 03:09:13