Bind/Autenticazione con LDAP
Ciao a tutti ...in questa bella giornata di pioggia sono alle prese con il protocollo LDAP (VS2005 ASP.NET 2.0 & vb)...uao!
Ho un problema con il bind di un utente su un LDAP.
Posto il codice e sotto scrivo il problema:
Public Function IsAuthenticated(ByVal domain As String, ByVal username As String, ByVal pwd As String) As Boolean
'-------------Percorso con utente, password, autenticazione anonimi -----------
Dim entry As DirectoryEntry = New DirectoryEntry("LDAP://ldap-test2/o=...............", "", "",
AuthenticationTypes.Anonymous)
Try
'Bind to the native AdsObject to force authentication
Dim obj As Object = entry.NativeObject
'Imposto la ricerca con l' utente inserito
Dim search As DirectorySearcher = New DirectorySearcher(entry)
Dim u As String = username
search.Filter = "(&(uid=" & u & ")
search.PropertiesToLoad.Add("uid") 'ID
search.PropertiesToLoad.Add("givenname") 'Nome
search.PropertiesToLoad.Add("cn") 'Cognome e Nome
Dim result As SearchResult = search.FindOne()
If (result Is Nothing) Then
Return False
End If
'Del percorso dell' utente trovato mi costruisco il DN (con uid= o con cn=)
Dim IE As Integer = InStr(result.Path, "uid") + 3
Dim dn As String = "cn=" & Right(result.Path, result.Path.ToString.Length - IE)
'-------------- Fine ricerca con username, pwd e auth anonimo --------------
'-------------------------- Tentativo di bind con credenziali -------------------
Try
Dim ldap As System.DirectoryServices.Protocols.LdapConnection = New
System.DirectoryServices.Protocols.LdapConnection("LDAP://ldap-test2")
ldap.SessionOptions.SecureSocketLayer = True
ldap.AuthType = AuthType.Basic
'Passo il dn dell' utente (es. uid/cn=luca, ou=ufficio, o=regione, dc=stato, dc=it)
Dim creds As New NetworkCredential(dn, pwd)
ldap.Bind(creds) '<----- va sempre in errore dando poi come messaggio di eccezione "Server LDAP non
disponibile"
'Mi piacerebbe arrivare qui per avere poi modo di sapere se il bind è andato a buon fine o no....:-)
return Bind
Catch ex As System.DirectoryServices.Protocols.LdapException
MsgBox("Errore: " & ex.Message)
Return False
End Try
'-------------------------
Questo è il codice.
Praticamente riesco a collegarmi in anonimo senza username e password, riesco a trovare l' utente che cerco e ottenere il
suo percorso, però se cerco (anche in altri modi utilizzando anche nuovamente il DirectorySearcher) ad eseguire il bind con
le credenziali mi da sempre l' errore SERVER LDAP NON DISPONIBILE!
Ho provato a settare la porta nel percorso ldap, a togliere l' SSL...sembra che si connetta solo in anonimo!
Questo è la parte aggiunta per l' autenticazione LDAP al mio web.config
<authentication mode="Forms">
<forms loginUrl="logon.aspx" name="adAuthCookie" timeout="60" path="/">
</forms>
</authentication>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
<identity impersonate="true"/>
Cosa sbaglio?
Grazie mille