用于识别特定 OU (AD) 中对象的 LDAP 搜索过滤器语法(仅)

LDAP Search Filter Syntax (ONLY) to Identify Objects in a Specific OU (AD)

许多与 AD 交互的非 LDAP 特定应用程序(例如读取对象或使用 AD 进行身份验证的应用程序)仅允许指定 LDAP 搜索过滤器。但是,这个问题是我不能将查询限制在默认域分区级别以下(至少,AFAIK)。

为了解决这个问题,我尝试使用如下搜索过滤器:

(&(objectClass=user)(objectCategory=person)(distinguishedname=*,OU=MyNamedOU,DC=*))

...但是,在它不起作用之后,我开始查找有关如何不能基于可分辨名称进行查询的文章,因为它是一个构造属性。

无论如何,有没有办法仅基于搜索过滤器语法将查询限制到特定的 OU?

TIA

Active Directory 不允许您在 distinguishedName 上搜索部分匹配项。如果查询中有distinguishedName,则只能是完全匹配。对于任何采用 distinguishedName 的属性都是如此,例如 managermember

确实没有办法仅通过查询字符串将查询限制为特定 OU,因为没有具有 OU 的可搜索属性。如果您只想搜索特定的 OU,您需要:

  1. 通过将 SearchRoot (sometimes called "search base") to that OU rather than the whole domain. You can also set the SearchScope 设置为 SearchScope.OneLevel 来搜索单个 OU,如果需要则不搜索子 OU。对要包含的每个 OU 重复搜索。或者,
  2. 用您想要的结果搜索最顶层的 OU,遍历结果,并通过查看 distinguishedName 丢弃您不想要的 OU 中的结果。 (因为此时您已经有了结果,distinguishedName 只是一个字符串,您可以随意使用它,包括部分匹配)

第二个选项通常会更快,因为它意味着针对 AD 进行一次搜索而不是多次搜索,但这取决于您最终得到多少结果以及要丢弃多少结果。