代码之家  ›  专栏  ›  技术社区  ›  DougN

用于搜索的通用LDAP库?

  •  3
  • DougN  · 技术社区  · 17 年前

    (&(objectCategory=person)(objectClass=user)(uid={username}))
    

    ldap_search 有了这个搜索/过滤器,我必须提供一个开始基础(节点/OU/任何东西)来搜索。但我不知道从哪里开始搜索——我只有用户名。是否仍然需要指定用于OpenLDAP、Active Directory、Netscape LDAP等的树的根?

    另外,任何能够回答这个问题的人都可能会对此有所帮助:uid属性是否得到普遍支持,或者我是否需要根据我正在使用的LDAP服务器的品牌搜索不同的属性?(我看到有人提到需要搜索 uid , CN SAMAccountName

    3 回复  |  直到 15 年前
        1
  •  5
  •   Stefan Gehrig    17 年前

    关于一般检索搜索库的第一个问题:

    每个LDAP目录服务器(我认为符合LDAP协议)在一个名为 RootDSE . 其中一件事你可以通过 RootDSE 是吗 NamingContext 这基本上可以告诉您此服务器上承载了哪些不同的树。

    因此,您可以为用户名搜索检索顶级搜索库。

    这个 RootDSE 可以通过查询服务器上的DN“”(空字符串)并指定要获取所有操作属性来检索。以下是OpenLDAP服务器的一些示例:

    ldapsearch -H ldap://ldap.mydomain.com -x -s base -b "" +
    # note the + returns operational attributes
    

    这将返回类似于下面所示的内容(来自OpenLDAP 2.4.8)-括号中的值是添加的解释,服务器不会返回:

    dn:
    structuralObjectClass: OpenLDAProotDSE
    configContext: cn=config
    namingContexts: dc=example,dc=com
    namingContexts: dc=example,dc=net
    monitorContext: cn=Monitor
    supportedControl: 1.3.6.1.4.1.4203.1.9.1.1 (Contentsync RFC 4530)
    [...]
    supportedExtension: 1.3.6.1.4.1.4203.1.11.1 (ModifyPassword RFC3088)
    [...]
    supportedFeatures: 1.3.6.1.1.14 (Modify-Increment RFC4525)
    [...]
    supportedLDAPVersion: 3
    supportedSASLMechanisms: NTLM
    [...]
    entryDN:
    subschemaSubentry: cn=Subschema
    

    http://www.zytrax.com/books/ldap/ch3/#operational )


    关于第二个问题,关于 uid 属性:

    我不认为您应该依赖这个,因为它强烈地依赖于用于存储用户数据的模式(尽管大多数用户模式类都有 液体 属性(我想)。但这取决于你想在你的程序中使用的灵活性。也许最好的方法是让最终用户可以配置用户过滤器字符串(您甚至可以使用搜索库来实现这一点,这将具有一些性能优势(当用户仅位于一个小的子树中时,无需搜索整个树,也无需查询RootDSE))。

        2
  •  2
  •   jwilleke    17 年前

    我不会依赖uid作为LDAP中用户条目的适当搜索属性。许多公司只保证employeeID在LDAP DIT中是唯一的。

        3
  •  0
  •   DancesWithBamboo    17 年前

    您需要定义开始搜索的容器。这大概是

    "LDAP://" + _ADSPath + ":" + _ADSPort + "/" + _ADSRootContainer
    

    其中_ADSPath是服务器主机名/ip_ADSPort是端口号(默认情况下通常为389);而_ADSRootContainer是容器路径的其余部分(比如ou=Users)。 路径将取决于您正在搜索的实现。您可以从高于容纳用户的容器的位置启动,并在搜索对象上设置参数以使用多级搜索。但速度会慢得多。