CSharp:LDAP
From Aino Wiki
LDAP = Lightweight Directory Access Protocol
Contents
LDAP
E' un protocollo per definire, gestire, l'accesso a risorse gerarchiche chiamate entry.
Un uso comune del LDAP è essere una parte del Signle Sign On (Autenticazione unica) SSO
Materiale:
Login
Utilizzato anche come parte del SSO=single-sign-on, configurato su Active Directory è possibile utilizzarlo per l'autenticazione utente.
Se il computer o il server a cui si accede, è in dominio Active Directory è possibile adottarlo per autenticare un utente attraverso le sue credenziali di dominio. Sostanzialmente, attraverso librerie dedicate di Microsoft (es. System.DirectoryServices
), è possibile sfruttare delle funzionalità, in particolare quella di autenticazione, allo scopo di identificare un utente attraverso la validazione di credenziali.
L'utente fornice le due stringhe, userName e Password ed una apposita funzione restituisce VERO o FALSO a seconda che l'utente sia riconosciuto come registrato sul dominio di rete.
Campo di utilizzo è quello nell'ambito di servizi applicativi client-server per cui utenti, prima di usufruire dei servizi software, devono essere identificati ed, in base alle autorizzazioni preventivamente assegnate, possono accedervi opportunamente.
Codice
Esempio 1 - Login
Nel seguente esempio si simula un autenticazione di un utente mediante username e password, la funzione cuore e che verifica l'autenticazione è la "Login_ActiveDirectory()", questa usa il parametro 'ldapsConnString' che è calcolato dalla funzione "GetCurrentDomainPath()".
NOTA non c'è bisogno di alcuna URL del server LDAP!
//... using System.DirectoryServices; //Necessario per interrogazioni LDAP //... //---------------------------- Metodi helper ---------------------------------------- /// Genera la "stringa di connessione" necessaria all'accesso all'archivio LDAP. /// Non c'è bisogno di fare nessuna modifica, la stringa LDAP://RootDSE E' STANDARD! private string GetCurrentDomainPath() { DirectoryEntry de = new DirectoryEntry("LDAP://RootDSE"); return "LDAP://" + de.Properties["defaultNamingContext"][0].ToString(); } /// Dati userName, password e "stringa di connessione" (generata dal metodo precedente) /// verifica le credenziali e restituisce eventualmente un errore. private bool Login_ActiveDirectory(string username, string password, string ldapsConnString, out string errorMessage) { bool outcome = false; try { errorMessage = string.Empty; DirectoryEntry entry = new DirectoryEntry(ldapsConnString , username, password , AuthenticationTypes.Secure); DirectorySearcher search = new DirectorySearcher(entry); System.DirectoryServices.SearchResult result = search.FindOne(); outcome = result != null; } catch (Exception ex) { errorMessage = string.Format("{0}", ex.Message); } return outcome; } //---------------------------- FINE Metodi helper ------------------------------------ /// /// Handler pulsante OK per verifica credenziali e utente!!! /// private void BtnLoginOK_Click(object sender, EventArgs e) { string errorMessage = string.Empty; string loginOutcome = string.Empty; string ldapConnString = string.Empty; string userName = string.Empty; string password = string.Empty; try { userName = TxtUserName.Text.Trim(); password = TxtPassword.Text.Trim(); ldapConnString = TxtConnectionString.Text.Trim(); if (userName == string.Empty || password == string.Empty) { throw new Exception("Supply userName and password!"); } Cursor.Current = Cursors.WaitCursor; if (ldapConnString == string.Empty) { ldapConnString = GetCurrentDomainPath(); // <------------- !!! TxtConnectionString.Text = ldapConnString; } RcTxt_Log.Text += string.Format("Try to log-in \"{0}\" using LDAP...\r\n", userName); Application.DoEvents(); RcTxt_Log.Text += string.Format("LDAP conn. string: {0}\r\n", ldapConnString); if (Login_ActiveDirectory(userName, password, ldapConnString, out errorMessage)) / / <----------- !!! { loginOutcome = string.Format("Login succesful for \"{0}\".", userName); MessageBox.Show(loginOutcome, "Login outcome", MessageBoxButtons.OK, MessageBoxIcon.Information); RcTxt_Log.Text += string.Format("{0}\r\n", loginOutcome); } else { throw new Exception(errorMessage); } Cursor.Current = Cursors.Default; } catch (Exception ex) { Cursor.Current = Cursors.Default; errorMessage = string.Format("{0}", ex.Message); MessageBox.Show(errorMessage, "[BtnLoginOK]", MessageBoxButtons.OK, MessageBoxIcon.Error); RcTxt_Log.Text += string.Format(">> ERROR {0}\r\n", errorMessage); } }
Materiale: codemag.com
Tabella attributi
Tabella degli attributi del DN (Distinguished Name, base o punto di partenza dela ricerca)
Attributo | Significato |
---|---|
cn | common name |
ou | organization unit |
dc | directory context |
dn | domain name |
es.:
"cn=John Doe,ou=people,dc=wikipedia,dc=org"
ADFS
Active Directory Federation Services da wikipedia
Mappa e Link
C# | Sistemi di autenticazione
Visual Studio | MS SQL | Dizionario | Utenze Windows
Parole chiave: