Autentificare automată folosind Active Directory și Autentificare Windows

13 iul. 2011, 21:36:24
Vizualizări: 22.3K
Voturi: 3

Am reușit să configurez și să folosesc câteva plugin-uri LDAP diferite (CoSign SSO, Simple LDAP Logon) pentru a crea noi utilizatori WordPress bazați pe utilizatorii din Active Directory, dar încă necesită autentificarea manuală pentru a posta. Există vreo modalitate de a prelua credențialele utilizatorului din browser și de a-i autentifica automat de fiecare dată când vizitează site-ul WordPress? Am configurat IIS cu Windows Authentication, iar URL-ul este listat în browser ca fiind unul de încredere căruia i se pot trimite credențiale.

Am nevoie de un alt plugin sau ar necesita editarea unor pagini din WordPress?

mulțumesc

0
Toate răspunsurile la întrebare 2
2

Dacă utilizați Autentificarea Windows cu IIS, PHP poate citi utilizatorul autentificat curent care este conectat din $_SERVER["LOGON_USER"];

Dacă această variabilă este setată și utilizatorul nu primește o solicitare de autentificare HTTP, puteți presupune că acreditările utilizatorului sunt corecte. Prin urmare, cu puțin cod WordPress, puteți citi acea variabilă $_SERVER['LOGON_USER'] și, dacă utilizatorul nu este autentificat în WordPress, îl puteți conecta automat cu acel nume de utilizator.

Plasați în fișierul de funcții al temei sau într-un fișier MU plugins.

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

Poate fi necesar să faceți unele ajustări suplimentare variabilei $user_login pentru a obține numele de utilizator corect care se potrivește în tabela WordPress.

14 iul. 2011 20:06:23
Comentarii

Dacă activez autentificarea Windows, primesc mesajul "Pagina nu poate fi afișată deoarece a apărut o eroare internă pe server". Există ceva de făcut în plus față de activarea autentificării Windows?

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

În primul rând, aș dori să apreciez efortul depus pentru a crea o astfel de funcție minunată. Am o problemă minoră cu această funcție - pot să fac autentificare automată în WordPress prin această metodă, dar dacă vreau să mă deconectez, nu se deconectează niciodată. Doresc să adaug funcționalitate de deconectare în această funcție, astfel încât un alt utilizator să se poată conecta de pe același calculator.

User User
10 ian. 2012 11:44:10
2

Ai putea gestiona problema de logout cu ceva de genul acesta

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

Și o altă funcție pentru a distruge acest cookie la logare

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

Această soluție nu a fost testată. S-ar putea să întâmpinați probleme la setarea cookie-ului dacă există deja output pe pagină, dar cred că aceasta ar putea fi depășită relativ ușor.

10 ian. 2012 12:04:44
Comentarii

Interesant. Am ajuns independent la aproximativ aceeași soluție, dar mă chinui să înțeleg de ce apelul setcookie() din my_logout_cookie() nu setează efectiv cookie-ul...

Kirby Kirby
16 mai 2015 02:58:23

În loc să folosesc cookie-uri, am pornit o sesiune și am stocat flag-ul în $_SESSION

Kirby Kirby
16 mai 2015 03:09:13