当前位置:  开发笔记 > 编程语言 > 正文

用于搜索的通用LDAP基础?

如何解决《用于搜索的通用LDAP基础?》经验,为你挑选了1个好方法。

我正在编写一些C++/Win32代码来搜索LDAP目录中的用户(实际上我需要验证用户名/密码是否正确,然后验证组成员身份).我有用户名,所以我希望以下内容可行:

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

当我ldap_search使用此搜索/过滤器调用时,我必须提供一个起始基(节点/ OU /无论什么)来搜索.但我不知道从哪里开始搜索 - 我只有用户名.反正是否指定将与OpenLDAP,Active Directory,Netscape LDAP等一起使用的树的根?

此外,任何能够回答这个问题的人都可能对此有所帮助:uid属性是否受到普遍支持,或者我是否需要搜索不同的属性,具体取决于我正在与哪个品牌的LDAP服务器进行通信?(我见过对需要搜索的人的引用uid,CN甚至SAMAccountName).



1> Stefan Gehri..:

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

每个LDAP目录服务器(我认为符合LDAP协议)都会在名为RootDSE的节点下公开一些操作内容.您可以通过RootDSE检索的其中一项是namingContexts,它基本上可以告诉您在此服务器上托管的不同树.

因此,您可以检索用户名搜索的顶级搜索基础.请注意:某些LDAP(例如OpenLDAP)服务器可以托管多个树,因此您必须在找到多个命名上下文时提出解决方案.

RootDSE的可以通过查询服务器要得到所有的操作属性,以及在DN""(空字符串)和specifiyng检索.只是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属性可用性的第二个问题:

我不认为你应该依赖这个,因为它强烈依赖于用于存储用户数据的模式(尽管大多数用户模式类将具有uid我认为的属性).但这取决于您希望放入程序的灵活性.也许最好的方法是让最终用户可以配置用户过滤字符串(你甚至可以用搜索库来做这个,这会有一些性能优势(当用户只位于用户时,不需要搜索整个树)一个小子树,无需查询RootDSE)).

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有