Ciao a tutti,
ho un mezzo problema con l'autenticazione LDAP.
Dico mezzo perchè in realtà riesco a fa autenticare l'utente tramite LDAP ma solo con il nome per esteso.
Mi spiego meglio, questo è il mio codice:
Naturalmente in $_SESSION['user'] e $pass ci sono le credenziali che la funzione prende da un form (verificate e corrette). In questo modo eseguo l'autenticazione confrontando il nome inserito con il parametro CN del path LDAP che corrisponde al nome per eseteso dell'utente (ad esempio 'Mario Rossi').
Una volta autenticato, eseguito il bind e fatta la ricerca la variabile $info è un array contenente tutte le informazioni sull'utente che ha effettuato l'accesso tra cui il nome utente (che date le policy LDAP per l'utente 'Mario Rossi' sarebbe 'mrossi') nel parametro sAMAccountName.
Quello che vorrei fare è l'autenticazione direttamente attraverso questo parametro, che è poi quello che succede normalmente in un dominio.
Dato il codice precedente ho provato una cosa del genere:
ma chiaramente prima di 'OU=UO Gestione Sistemi' LDAP credo si aspetti il 'CN=Mario Rossi' infatti questo modo non funziona.
Gugolando un po e riferendomi a php.net ho visto che i parametri di un utente sono leggibili solo dopo aver eseguito un ldap_search che, a sua volta, si può fare solo se si forniscono le credenziali.
Tirando le somme di tutto il discorso il mio problema è che mentre 'Mario Rossi' è riconducibile ad un path diretto di LDAP, 'mrossi' è una proprietà dell'oggetto al quale questo path fa riferimento e non riesco ad estrarlo senza prima autenticarmi.
Spero di essere stato abbastanza chiaro e grazie a tutti in anticipo
ho un mezzo problema con l'autenticazione LDAP.
Dico mezzo perchè in realtà riesco a fa autenticare l'utente tramite LDAP ma solo con il nome per esteso.
Mi spiego meglio, questo è il mio codice:
Codice:
$ldap_server = "ldap://giove.emiliainf.lan;
$ldap_port=389;
$dn = "OU=Utenti,DC=emiliainf,DC=lan";
$user= "CN=".$_SESSION['user'].",OU=UO Gestione Sistemi,OU=Utenti,DC=emiliainf,DC=lan";
$filter="(&(CN=".$_SESSION['user']."*))";
$these=array();
$ds = ldap_connect($ldap_server,$ldap_port);
$bind_results=ldap_bind($ds,$user,$pass);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
$sr=ldap_search($ds, $dn, $filter,$these);
$info=ldap_get_entries($ds, $sr);
if($info["count"]>0){
$_SESSION['auth']=true;
return $this->arrLang['actions']['correctLogin']."<br />";
}
ldap_close($ds);
Una volta autenticato, eseguito il bind e fatta la ricerca la variabile $info è un array contenente tutte le informazioni sull'utente che ha effettuato l'accesso tra cui il nome utente (che date le policy LDAP per l'utente 'Mario Rossi' sarebbe 'mrossi') nel parametro sAMAccountName.
Quello che vorrei fare è l'autenticazione direttamente attraverso questo parametro, che è poi quello che succede normalmente in un dominio.
Dato il codice precedente ho provato una cosa del genere:
Codice:
$user= "sAMAccountName=".$_SESSION['user'].",OU=UO Gestione Sistemi,OU=Utenti,DC=emiliainf,DC=lan";
Gugolando un po e riferendomi a php.net ho visto che i parametri di un utente sono leggibili solo dopo aver eseguito un ldap_search che, a sua volta, si può fare solo se si forniscono le credenziali.
Tirando le somme di tutto il discorso il mio problema è che mentre 'Mario Rossi' è riconducibile ad un path diretto di LDAP, 'mrossi' è una proprietà dell'oggetto al quale questo path fa riferimento e non riesco ad estrarlo senza prima autenticarmi.
Spero di essere stato abbastanza chiaro e grazie a tutti in anticipo