Da un paio di progetti a questa parte, mi è capitato di dover implementare l'autenticazione di Active Directory all'interno delle mie applicazioni.
I vantaggi che vengono portati da questa integrazione sono molti, ma forse quello più pratico e trasparente per gli utenti è quello di non avere più password da ricordarsi.
Infatti con tale implementazione gli utenti utilizzeranno lo stesso username e la stessa password che utilizzano per accedere al proprio computer.
Per prima cosa bisogna aggiungere il namespace System.DirectoryServices
using
System.DirectoryServices;
Adesso, creiamo la pagina di login disegnando due caselle di testo(TxtUsername, TxtPassword) e un pulsante.
Nell'evento click di quest'ultimo andiamo a mettere il seguente codice:
string path = LDAP://serverLDAP/O=GruppoLDap;
string localUsername = "uid=" + UserName.Text + ",ou=" + directory + ",o=DirectoryLDap";
string localPassword = Password.Text;
DirectoryEntry de = new DirectoryEntry(path);
de.AuthenticationType = AuthenticationTypes.ServerBind;
de.Username = localUsername;
de.Password = localPassword;
DirectorySearcher search = new DirectorySearcher(de);
search.PropertiesToLoad.Add("cn");
search.Filter = "(uid=" + UserName.Text + ")"; ;
search.CacheResults = true;
search.SizeLimit = 1000;
SearchResultCollection results = search.FindAll();
if(results.Count == 0)
{
FailureText.Text = "Autenticazione fallita<br> Utente o Password errati.";
search.Dispose();
return;
}
else
{
search.Dispose();
Response.Redirect("Default.aspx");
}
Una proprietà molto importante e su cui vale la pena soffermarsi un attimo è AuthenticationType.
Può assumere molti valori (che possiamo trovare enumerati qui
http://msdn2.microsoft.com/en-us/library/system.directoryservices.authenticationtypes.aspx ) e per sapere il valore da utilizzare è bene contattare l'amministratore di rete.
Di solito se Active Directory è configurata con il modello di default, le ricerche possono essere effettuate con autenticazione Anonymous.