Bind/Autenticazione con LDAP

venerdì 23 aprile 2010 - 14.40

sorigrafia Profilo | Junior Member

Ciao a tutti ...in questa bella giornata di pioggia sono alle prese con il protocollo LDAP...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

--

AirLainz

somamoy32 Profilo | Newbie

Salve! Io ho lo stesso problema ma in C#!
Mi potresti dire,per favore, se hai risolto e se si come?

Ti ringrazio anticipatamente,

sorigrafia Profilo | Junior Member

Ciao...putropop non sono risucito...per ora ho abbandonato ma sicuramente sarà una cosa sulla quale prima o poi dovro tornarci su.
Se dovessi riuscire te lo scrivo....se riesci a trovare come fare lo scriveresti pure tu?

Ciao
--

AirLainz

sorigrafia Profilo | Junior Member

Ah no...pensavo fosse il mio ultimo post. Mi son fermato qui..autenticazione semplice, senza pero SSL

Dim creds As New NetworkCredential
Dim entry As DirectoryEntry = New DirectoryEntry("LDAP://ldap-test2/o=............", "", "", AuthenticationTypes.Anonymous)
Dim LdapConnection As System.DirectoryServices.Protocols.LdapConnection

Try
Dim obj As Object = entry.NativeObject
Dim search As DirectorySearcher = New DirectorySearcher(entry)

Dim applicativo As String = "posta"
search.Filter = "(&(uid=" & sID & ")(progAllowed=" & applicativo & ")(!(shadowExpire=*))" & _
"(!(passwordExpired=1))(objectClass=auslAccount)(objectClass=shadowAccount))"

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

'Tengo il Dn cancellando il percorso dell' host
Dim IE As Integer = InStr(result.Path, "uid") - 1
Dim dn As String = Right(result.Path, result.Path.ToString.Length - IE)

creds.UserName = dn
creds.Password = sPassword

Catch ex As Exception
Me.LabelAccount.Text = "Errore: " & ex.Message
Return False
End Try

'---------------------------- BIND SEMPLICE -------------------------
Try
'++++++Con Credenziali++++++
LdapConnection = New System.DirectoryServices.Protocols.LdapConnection(New LdapDirectoryIdentifier("ldap-test2:389", True, False))
LdapConnection.SessionOptions.ProtocolVersion = 3
LdapConnection.AuthType = AuthType.Basic
LdapConnection.Bind(creds)
LdapConnection.Dispose()
Return True

'++++Anomimo++++'
'LdapConnection = New System.DirectoryServices.Protocols.LdapConnection(New LdapDirectoryIdentifier("ldap-test2:389", True, False))
'LdapConnection.SessionOptions.ProtocolVersion = 3
'LdapConnection.AuthType = AuthType.Anonymous
'LdapConnection.Bind()
'LdapConnection.Dispose()

'SearchRequest.Scope = System.DirectoryServices.Protocols.SearchScope.Base
'SearchRequest.DistinguishedName = ldapPath

Catch ex As Exception
Me.LabelAccount.Text = "Errore: " & ex.Message
Return False
End Try
'-------------------------- fine BIND SEMPLICE -----------------------

Fammi sapere se devi e riesci con certificati SSL.
Ciao
--

AirLainz

somamoy32 Profilo | Newbie

Te lo farò sapere senz'altro!

Grazie lo stesso

sorigrafia Profilo | Junior Member

ok, grazie, spero che almeno il mio ultimo post ti sia servito.
ciao
--

AirLainz
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5