Login automatico con Active Directory e Autenticazione Windows

13 lug 2011, 21:36:24
Visualizzazioni: 22.3K
Voti: 3

Sono riuscito a configurare e utilizzare diversi plugin LDAP (CoSign SSO, Simple LDAP Logon) per creare nuovi utenti WordPress basati sugli utenti di Active Directory, ma questo richiede ancora che gli utenti effettuino manualmente il login per pubblicare post. Esiste un modo per recuperare le credenziali dell'utente direttamente dal browser ed effettuare automaticamente il login quando visitano il sito WordPress? Ho configurato IIS con l'Autenticazione Windows e l'URL è elencato nel browser come uno di quelli affidabili a cui può inviare le credenziali.

Ho bisogno di un altro plugin o questo richiederebbe la modifica di una o due pagine in WordPress?

grazie

0
Tutte le risposte alla domanda 2
2

Se si utilizza l'autenticazione Windows con IIS, PHP può leggere l'utente attualmente autenticato che ha effettuato l'accesso da $_SERVER["LOGON_USER"];

Se questa variabile è impostata e l'utente non riceve un prompt di autenticazione HTTP, puoi presumere che le credenziali dell'utente siano corrette. Quindi con un po' di codice WP potresti leggere quel $_SERVER['LOGON_USER'] e se l'utente non è loggato in WP, effettuare automaticamente il login con quel nome utente.

Posiziona nel file functions del tema o in un file MU plugin.

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

Potresti aver bisogno di apportare alcune ulteriori modifiche alla variabile $user_login in modo da ottenere il nome utente corretto che corrisponde nella tabella di WordPress.

14 lug 2011 20:06:23
Commenti

Se abilito l'autenticazione Windows, ricevo il messaggio "La pagina non può essere visualizzata perché si è verificato un errore interno del server". C'è qualcos'altro da fare oltre ad abilitare l'autenticazione Windows?

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

Innanzitutto vorrei apprezzare il tuo sforzo per creare una funzione così utile. Ho un piccolissimo problema con questa funzione: riesco ad effettuare il login automatico in WordPress con questo metodo, ma se voglio fare il logout, non riesce mai a disconnettersi. Vorrei la funzionalità di logout in questa funzione in modo che un altro utente possa accedere dallo stesso computer.

User User
10 gen 2012 11:44:10
2

Potresti gestire il problema del logout con qualcosa del genere

function auto_login() {
    // Verifica se l'utente non è loggato, esiste LOGON_USER e il cookie di logout non è true
    if ( !is_user_logged_in() && isset($_SERVER['LOGON_USER']) && my_logout_cookie_check() === false ) {
        $user_login = $_SERVER['LOGON_USER'];
        $user = get_userdatabylogin( $user_login ); // Ottiene i dati utente
        $user_id = $user->ID;
        wp_set_current_user( $user_id, $user_login ); // Imposta l'utente corrente
        wp_set_auth_cookie( $user_id ); // Imposta il cookie di autenticazione
        do_action( 'wp_login', $user_login ); // Azione al login
    }
}
add_action( 'init', 'auto_login' );
add_action( 'wp_logout', 'my_logout_cookie' );
function my_logout_cookie() {
    setcookie( 'logout', 'true' ); // Imposta cookie al logout
}
function my_logout_cookie_check() {
    if( $_COOKIE['logout'] === 'true' )
        return true;
    else
        return false;
}

E un'altra funzione per distruggere questo cookie al login

add_action( 'wp_login', 'my_logout_cookie_destroy' );
function my_logout_cookie_destroy() {
    setcookie( 'logout', 'false' ); // Resetta il cookie al login
}

Questa soluzione non è stata testata. Potresti riscontrare problemi con l'impostazione del cookie se hai già un output di pagina, ma penso che potrebbe essere superato relativamente facilmente.

10 gen 2012 12:04:44
Commenti

Interessante. Ho sviluppato in modo indipendente una soluzione più o meno simile, ma mi sto scervellando per capire perché la chiamata setcookie() in my_logout_cookie() non imposta effettivamente il cookie...

Kirby Kirby
16 mag 2015 02:58:23

Invece di usare i cookie, ho quindi avviato una sessione e memorizzato il flag in $_SESSION

Kirby Kirby
16 mag 2015 03:09:13