【问题标题】:LDAP connection and searchLDAP 连接和搜索
【发布时间】:2018-09-06 14:30:46
【问题描述】:

我对 LDAP 完全陌生,我需要在我的办公室 LDAP 中检索一些信息,没有人来帮助我。 这是我得到的信息(出于安全原因,我稍作更改):

  • 主机:.ldap.host
  • 搜索库:ou=People,dc=xxx,dc=yyyy,dc=zzzzz
  • 过滤器:(projectTeams=manager)
  • 用户:uid=eric, ou=Technical,dc=xxx,dc=yyyy,dc=zzzzz
  • 密码:blabla

这就是我找到所有“经理”的全部工作

这是我的代码:

Dim oRoot2 As DirectoryEntry = New DirectoryEntry ("LDAP://the.ldap.host", "uid=eric,ou=Technical,dc=xxx,dc=yyyy,dc=zzzzz", "blabla",AuthenticationTypes.None)
try
    Dim connected As Object = oRoot2.NativeObject
    msgbox "Connected"
    Dim searcher As DirectorySearcher = New DirectorySearcher(oRoot2)
    searcher.Filter = "(projectTeams=manager)"
    Dim DirEntry As DirectoryEntry
    For Each result As SearchResult In searcher.FindAll
        DirEntry = result.GetDirectoryEntry
        lst.Items.Add(DirEntry.Properties("iam-uid").Value)
    Next
catch ex as exception
    msgbox (ex.message)
End try

运行时,我收到“已连接”消息框,但随后出现错误“服务器上没有此类对象”。执行以下行时会引发此错误:

For Each result As SearchResult In searcher.FindAll

我不知道如何编码搜索库是“ou=People,dc=xxx,dc=yyyy,dc=zzzzz”

我已经花了两天时间尝试。欢迎所有帮助。

【问题讨论】:

  • 尝试添加一些调试步骤。将部分包装在 Try/Catches 或 IF 语句中可能有助于深入了解问题所在。此链接可能有助于 Try/Catch:docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/…
  • 谢谢,我编辑帖子以解释错误发生在哪一行。
  • 过去我使用以下方法将结果加载到搜索结果集合中:Dim result As SearchResultCollection = searcher.FindAll()。然后你会做你的 For Each res As SearchResult In 结果。查看此链接以获取示例:visual-basic-tutorials.com/Tutorials/Controls/…
  • 另外 - 你有 "uid=eric,ou=Technical,dc=xxx,dc=yyyy,dc=zzzzz" 这是行不通的,因为你没有在这里查看 OU,你需要删除 uid 部分,以便您只剩下要搜索的基本 ou。我的猜测是:ou=Technical,dc=xxx,dc=yyyy,dc=zzzzz
  • 如果我去掉uid部分,如何设置连接登录?

标签: vb.net ldap


【解决方案1】:

我终于找到了获取所需信息的方法,这是适合我的代码:

Dim oRoot2 As DirectoryEntry = New DirectoryEntry ("LDAP://the.ldap.host/ou=People,dc=xxx,dc=yyyy,dc=zzzzz", "uid=eric,ou=Technical,dc=xxx,dc=yyyy,dc=zzzzz", "blabla",AuthenticationTypes.None)

这个小改动改变了​​一切,其余代码(见下文)现在可以工作了。

try Dim connected As Object = oRoot2.NativeObject msgbox "Connected" Dim searcher As DirectorySearcher = New DirectorySearcher(oRoot2) searcher.Filter = "(projectTeams=manager)" Dim DirEntry As DirectoryEntry For Each result As SearchResult In searcher.FindAll DirEntry = result.GetDirectoryEntry lst.Items.Add(DirEntry.Properties("iam-uid").Value) Next catch ex as exception msgbox (ex.message) End try

我花了 3 个工作日才找到这个……噗。

【讨论】:

    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多