Login automatico con Active Directory e Autenticazione Windows
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
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.

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?

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.

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.

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...
