Autenticazione LDAP

martedì 15 febbraio 2005 - 11.14

Horus Profilo | Newbie

Buongiorno a tutti, sono nuovo di questo forum quindi perdonate eventuali mancanze.

Devo realizzare un applicativo web che effettua l'autenticazione degli utenti su un server LDAP. Ho fatto una serie di ricerche sul web fino a trovare quella che mi è sembrata la soluzione più completa all'indirizzo: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/SecNetHT02.asp

Non sono mai riuscito a farlo funzionare, mi restituisce sempre l'errore: "Exception Details: System.Runtime.InteropServices.COMException: Metodo di autenticazione richiesto non supportato dal server"

Ho poi fatto un altro piccolo applicativo per verificare la connessione con il server: se nell'inizializzazione della DirectoryEntry ometto nome utente e password riesco ad effettuare correttamente delle ricerche con un DirectorySearcher ma non riesco a controllare la password.

I miei dubbi ora sono:
1) E' possibile che il malfunzionamento sia dovuto all'utente che uso per collegarmi al server LDAP?

2) esiste una scappatoia? Dubito che i responsabili del server mi darenno un utente con le permission di letture sulle password di tutti gli utenti..

3) nelle mie varie ricerche ho trovato un componente IPWorks della nsoftware ma è solo nella versione trial, esiste qualche componente free che si occupi della gestione dell'autenticazione utente su LDAP?

Vi ringrazio anticipatamente dell'aiuto che vorrete darmi.
Saluti

Horus Profilo | Newbie

Riassumo quello che ho intuito:
io posso collegarmi ad un server LDAP utilizzando un qualsiasi utente della rete in maniera anonima, per controllare la password invece mi devo posizionare nel pathDN dell'utente da controllare.

Scusa la poca chiarezza dell'esposizione ma rispecchia quella che ho in testa.

Sono giunto a queste conclusioni provando ad utilizzare la dll Novell.Directory.Ldap con la quale riesco a fare l'autenticazione, sai per caso dove posso trovare la licenza di questa dll?

Oltre a questo hai qualche link di tutorial di come vanno costruiti i DN per collegarsi? Attualmente quello che mi funziona è: "uid=uXXXXXX, ou=Users, ou=SOTTODOMINIO, o=DOMINIO" ma ci sono arrivato per tentativi utilizzando un LDAP explorer, vorrei capire quello che faccio.

Grazie ancora per la tempestiva risposta.

Horus Profilo | Newbie

Si, le uso, ora cerco di fare un po' di chiarezza:

Con questo codice riesco a collegarmi e a vedere se un uetnte esiste:
----------------------------------------------------------
string SERVERNAME = "LDAP://serverurl/o=dominio";
string path = "";
string attr = "";

System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry(SERVERNAME);

System.DirectoryServices.DirectorySearcher mySearcher = new System.DirectoryServices.DirectorySearcher(entry);

mySearcher.Filter = ("(uid=" + user + )");
foreach(System.DirectoryServices.SearchResult result in mySearcher.FindAll())
{
lit.Text += "Path: " + result.GetDirectoryEntry().Path;
lit.Text += "<br><br>";

foreach (string pname in result.GetDirectoryEntry().Properties.PropertyNames)
{
lit.Text += pname + ": " + result.GetDirectoryEntry().Properties[pname].Value.ToString() + "<br>";
}

lit.Text += "<br><br>";
lit.Text += "Password: " + result.GetDirectoryEntry().Password;
}
----------------------------------------------------------

Se invece il costruttore della entry lo richiamo così
----------------------------------------------------------
System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry(SERVERNAME,user,pass);
----------------------------------------------------------
Iil sistema mi restituisce questo errore:
----------------------------------------------------------
Exception Details: System.Runtime.InteropServices.COMException: Metodo di autenticazione richiesto non supportato dal server.
----------------------------------------------------------


Tutto questo premesso stamattina ho trovato in giro per la rete una dll (Novell.Directory.Ldap) con un esempio fatto in questo modo:
----------------------------------------------------------
void Login_Click(Object sender, EventArgs E)
{
string userDN = "CN="+Username.Value+", OU=Accounting, O=Acme"; // Change to match your Distinguished Name (DN)

LdapConnection ldapConn = new LdapConnection();
ldapConn.Connect ("www.nldap.com", 389); // 389 is the default port.

try
{
ldapConn.Bind (userDN, Password.Value);
FormsAuthentication.RedirectFromLoginPage(Username.Value, PersistCookie.Checked);
}
catch(LdapException ldapErr)
{
Msg.Text = "Incorrect username/password combination.";
}
}
----------------------------------------------------------
Passandogli il corretto userDN ("uid="+Username.Value+", ou=Users, ou=SOTTODOMINIO, O=DOMINIO")
Questa procedura mi autentica correttamente, ho provato a sbagliare volutamente la password e se ne accorge.

A questo punto io sono quasi certo di sbagliare io qualcosa nell'uso di System.DirectoryServices ma proprio non riesco a capire cosa.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5