gpt4 book ai didi

winapi - 用于搜索的通用 LDAP 库?

转载 作者:行者123 更新时间:2023-12-02 07:26:43 34 4
gpt4 key购买 nike

我正在编写一些 C++/Win32 代码来在 LDAP 目录中搜索用户(实际上我需要验证用户名/密码是否正确,然后验证组成员身份)。我有用户名,所以我希望像下面这样的东西能够工作:

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

当我使用此搜索/过滤器调用ldap_search时,我必须提供一个起始基础(节点/OU/其他)来搜索。但我不知道从哪里开始搜索——我只有用户名。无论如何,是否可以指定与 OpenLDAP、Active Directory、Netscape LDAP 等一起使用的树的根?

此外,任何可以回答的人都可能对此有所帮助:uid 属性是否得到普遍支持,或者我是否需要根据我正在使用的 LDAP 服务器品牌来搜索不同的属性? (我看到有人需要搜索 uidCN 甚至 SAMAccountName)。

最佳答案

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

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

因此,您可以为您的用户名搜索检索顶级搜索库。 请注意:某些 LDAP(例如 OpenLDAP)服务器可以托管多个树,因此当发现多个命名上下文时,您必须想出一个解决方案。

可以通过向服务器查询 DN“”(空字符串)并指定您想要获取所有操作属性来检索 RootDSE。只是 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 属性) 。但这取决于您想要在程序中加入的灵 active 。也许最好的方法是让最终用户配置用户过滤器字符串(您甚至可以使用搜索库来执行此操作,这将具有一些性能优势(当用户仅位于一个小子树,不需要查询 RootDSE))。

关于winapi - 用于搜索的通用 LDAP 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/708046/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com