web-dev-qa-db-fra.com

Connexion automatique à l'aide de Active Directory et de l'authentification Windows

J'ai été en mesure de configurer et d'utiliser différents plug-ins LDAP (CoSign SSO, Simple LDAP Logon) pour créer de nouveaux utilisateurs WordPress basés sur les utilisateurs Active Directory, mais il leur faut néanmoins se connecter manuellement pour publier des messages. Existe-t-il un moyen de le faire extraire les informations d'identification de l'utilisateur du navigateur et de les connecter automatiquement chaque fois qu'il visite le site WordPress? J'ai IIS configuré avec l'authentification Windows et l'URL est répertoriée dans le navigateur comme étant une adresse à laquelle il peut faire confiance et à laquelle envoyer des informations d'identification.

Ai-je besoin d'un autre plugin ou cela nécessiterait-il l'édition d'une page ou deux dans WordPress?

merci

3
Curtis

Si vous utilisez l'authentification Windows avec IIS, _ PHP peut lire l'utilisateur authentifié actuel ayant ouvert une session à partir de $_SERVER["LOGON_USER"];

Si cette option est définie et que l'utilisateur ne reçoit pas d'invite d'authentification HTTP, vous pouvez supposer que les informations d'identification de l'utilisateur sont correctes. Donc, avec un certain codage WP, vous pouvez lire ce $_SERVER['LOGON_USER'] et s’ils ne sont pas connectés à WP, connectez-vous automatiquement avec ce nom d’utilisateur.

place dans le fichier de fonctions de thème ou dans un fichier de plug-ins 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');

Vous devrez peut-être peaufiner davantage la variable $user_login pour obtenir le nom d'utilisateur correct correspondant dans la table WP.

1
Brady

Vous pouvez gérer le problème de déconnexion avec quelque chose comme ça

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

Et une autre fonction pour détruire ce cookie lors de la connexion

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

Cette solution n'a pas été testée. Vous pouvez rencontrer des problèmes avec la configuration du cookie si vous avez déjà une sortie de page, mais je pense que cela pourrait être surmonté relativement facilement.

1
mor7ifer