Inicio de sesión automático usando Active Directory y Autenticación de Windows

13 jul 2011, 21:36:24
Vistas: 22.3K
Votos: 3

He podido configurar y usar diferentes plugins LDAP (CoSign SSO, Simple LDAP Logon) para crear nuevos usuarios de WordPress basados en los usuarios de Active Directory, pero aún requiere que inicien sesión manualmente para hacer publicaciones. ¿Hay alguna manera de obtener las credenciales del usuario desde el navegador y hacer que inicien sesión automáticamente cuando visiten el sitio de WordPress? Tengo IIS configurado con Autenticación de Windows y la URL está listada en el navegador como una en la que puede confiar y enviar credenciales.

¿Necesito otro plugin o esto requeriría editar una o dos páginas en WordPress?

gracias

0
Todas las respuestas a la pregunta 2
2

Si estás utilizando Autenticación de Windows con IIS, PHP puede leer el usuario autenticado actual que ha iniciado sesión desde $_SERVER["LOGON_USER"];

Si esta variable está configurada y el usuario no recibe un mensaje de autenticación HTTP, puedes asumir que las credenciales del usuario son correctas. Así que, con algo de código en WordPress, podrías leer ese $_SERVER['LOGON_USER'] y si el usuario no ha iniciado sesión en WP, iniciar sesión automáticamente con ese nombre de usuario.

Coloca esto en el archivo de funciones del tema o en un archivo de plugins 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');

Puede que necesites hacer algunos ajustes adicionales a la variable $user_login para obtener el nombre de usuario correcto que coincida en la tabla de WordPress.

14 jul 2011 20:06:23
Comentarios

Si habilito la autenticación de Windows, obtengo "La página no se puede mostrar porque se ha producido un error interno del servidor", ¿hay algo más que hacer además de habilitar la autenticación de Windows?

Naeem Sarfraz Naeem Sarfraz
15 nov 2011 21:11:34

En primer lugar, me gustaría agradecer tu esfuerzo por crear una función tan genial. Tengo un problema muy pequeño con esta función, puedo hacer el Auto Login en WordPress con este método, pero si quiero hacer logout, nunca se cierra la sesión, necesito funcionalidad de logout en esta función para que otro usuario pueda iniciar sesión desde el mismo ordenador.

User User
10 ene 2012 11:44:10
2

Podrías manejar el problema de cierre de sesión con algo como esto

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

Y otra función para destruir esta cookie al iniciar sesión

add_action( 'wp_login', 'my_logout_cookie_destroy' );
function my_logout_cookie_destroy() {
    setcookie( 'logout', 'false' );
}

Esta solución no ha sido probada. Podrías encontrar problemas al establecer la cookie si ya hay salida de página, pero creo que podría superarse relativamente fácil.

10 ene 2012 12:04:44
Comentarios

Interesante. He llegado de forma independiente a una solución muy similar pero me estoy rompiendo la cabeza tratando de entender por qué la llamada a setcookie() en my_logout_cookie() no establece realmente la cookie...

Kirby Kirby
16 may 2015 02:58:23

Entonces, en lugar de usar cookies, inicié una sesión y almacené el indicador en $_SESSION

Kirby Kirby
16 may 2015 03:09:13