it-swarm.com.de

Automatische Anmeldung mit Active Directory und Windows-Authentifizierung

Ich konnte verschiedene LDAP-Plugins (CoSign SSO, Simple LDAP Logon) einrichten und verwenden, um neue WordPress-Benutzer basierend auf den Active Directory-Benutzern zu erstellen. Sie müssen sich jedoch weiterhin manuell anmelden, um Beiträge zu verfassen. Gibt es eine Möglichkeit, die Anmeldeinformationen des Benutzers aus dem Browser abzurufen und automatisch anzumelden, wenn er die WordPress-Site besucht? Ich habe IIS mit Windows-Authentifizierung eingerichtet und die URL wird im Browser als eine URL aufgeführt, der es vertrauen kann und an die Anmeldeinformationen gesendet werden.

Benötige ich ein anderes Plugin oder müsste ich ein oder zwei Seiten in WordPress bearbeiten?

vielen Dank

3
Curtis

Bei Verwendung der Windows-Authentifizierung mit IIS PHP kann der aktuell authentifizierte Benutzer gelesen werden, der von $_SERVER["LOGON_USER"]; angemeldet ist.

Wenn dies festgelegt ist und der Benutzer keine HTTP-Authentifizierungsaufforderung erhält, können Sie davon ausgehen, dass die Benutzeranmeldeinformationen korrekt sind. Mit etwas WP Codierung können Sie diesen $_SERVER['LOGON_USER'] lesen und, wenn Sie nicht bei WP angemeldet sind, sich automatisch mit diesem Benutzernamen anmelden.

Platz in der Theme-Funktionsdatei oder in einer MU-Plugins-Datei.

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

Möglicherweise müssen Sie die Variable $user_login noch weiter anpassen, damit Sie den richtigen Benutzernamen erhalten, der in der Tabelle WP übereinstimmt.

1
Brady

Sie könnten das Abmeldeproblem mit so etwas lösen

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

Und eine weitere Funktion, um dieses Cookie bei der Anmeldung zu zerstören

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

Diese Lösung ist ungetestet. Sie könnten Probleme beim Setzen des Cookies bekommen, wenn Sie bereits eine Seitenausgabe haben, aber ich denke, das könnte relativ leicht überwunden werden.

1
mor7ifer