Permintaan sederhana LDAP Vb.net

Saya mencoba membuat kode vb.net untuk kueri sederhana melalui LDAP tetapi mengalami masalah dan tidak dapat menemukan lokasinya.

                Dim ldapServerName As String = "xxx.test.intranet.xxx.ca"
                Dim oRoot As DirectoryEntry = New DirectoryEntry("LDAP://" & ldapServerName & "/c=ca, DC=xxx,DC=corp,DC=xxx,DC=ca")
                oRoot.Username = "ou=Tool,ou=applications,o=xxx,c=ca"
                oRoot.Password = "something@2015"

                Dim LDAPSearcher As New DirectorySearcher()
                LDAPSearcher.Filter = "(&(employeenumber=6012589))"

                Dim SearchResult As SearchResult = LDAPSearcher.FindOne()
                Dim UserEntry As DirectoryEntry = SearchResult.GetDirectoryEntry()
                EDTEST.Text = UserEntry.Properties("employeenumber").Value.ToString

itu memberi saya kesalahan yang mengatakan bahwa objek tersebut tidak valid. Variabel pencari sebenarnya kosong sehingga ada hubungannya dengan permintaan saya.

Ini adalah pertama kalinya saya menggunakan LDAP¨dan saya telah mencoba beberapa solusi yang dapat saya temukan di internet tetapi sejauh ini tidak ada yang berhasil.

Kesalahan: Objek tidak disetel ke turunan suatu objek.


person Johnny Prescott    schedule 04.01.2016    source sumber


Jawaban (1)


Kecuali jika Anda menambahkan atribut lain untuk melakukan penelusuran, Anda tidak memerlukan operator AND dalam sintaksis filter Anda - penelusuran hanya dengan (employeenumber=6012589) akan berfungsi dengan baik.

Jika Anda memiliki atribut lain yang ingin dicari, sintaks filternya akan serupa dengan yang Anda miliki sekarang, hanya dengan atribut tambahan :

(&(employeenumber=6012589)(objectClass=user))

EDIT:

Saya membuat contoh menggunakan namespace tingkat bawah System.DirectoryServices dan System.DirectoryServices.Protocols. Ini membantu memecah fungsi login dan pencarian yang sebenarnya, dan juga akan memberikan konteks yang lebih baik ketika terjadi kesalahan. Misalnya, saya telah mengganti semua variabel saya dengan variabel yang Anda gunakan dalam pertanyaan Anda. Saya mengujinya terhadap instance Active Directory kami melalui port 389 yang tidak aman menggunakan kredibilitas saya dan domain dasar yang mirip dengan yang Anda gunakan.

Imports System.DirectoryServices.Protocols
Imports System.Net

Module Module1

Sub Main()

    ' setup your creds, domain, and ldap prop array 
    Dim username As String = "ou=Tool,ou=applications,o=xxx,c=ca"
    Dim pwd As String = "something@2015"
    Dim domain As String = "DC=xxx,DC=corp,DC=xxx,DC=ca"
    Dim propArray() As String = {"employeenumber"}

    ' setup your ldap connection, and domain component
    Dim ldapCon As LdapConnection = New LdapConnection("xxx.test.intranet.xxx.ca:389")
    Dim networkCreds As NetworkCredential = New NetworkCredential(username, pwd, domain)

    ' configure the connection and bind
    ldapCon.AuthType = AuthType.Negotiate
    ldapCon.Bind(networkCreds)

    ' if the above succceeded, you should now be able to issue search requests directly against the directory
    Dim searchRequest = New SearchRequest(domain, "(employeenumber=6012589)", SearchScope.Subtree, propArray)

    ' issue the search request, and check the results
    Dim searchResult As SearchResponse = ldapCon.SendRequest(searchRequest)
    Dim searchResultEntry As SearchResultEntry

    If (searchResult.Entries.Count > 0) Then ' we know we've located at least one match from the search

        ' if you're only expecting to get one entry back, get the first item off the entries list
        searchResultEntry = searchResult.Entries.Item(0)

        ' continue to do whatever processing you wish against the returned SearchResultEntry

    End If

End Sub

End Module
person X3074861X    schedule 04.01.2016
comment
Masih tidak berfungsi sebagaimana mestinya. sepertinya tidak dapat menemukan apa yang seharusnya. Namun, jika saya menggunakan LDAP Admin dan menghubungkan ini, saya dapat dengan jelas menemukan bahwa entri tersebut ada di sana. - person Johnny Prescott; 05.01.2016
comment
Hmm... Anda tahu, mungkin bukan ide yang buruk untuk sedikit mematahkan logika Anda. Saya dapat memberikan contoh VB.Net tentang bagaimana saya melakukan ini di C# - pertanyaan singkat, apakah Anda mencoba terhubung dengan aman melalui LDAPS (port 636), atau LDAP tidak aman melalui port 389? - person X3074861X; 05.01.2016