【问题标题】:How to get DN for a DirectorySearcher's SearchResult in .NET?如何在 .NET 中获取 DirectorySearcher 的 SearchResult 的 DN?
【发布时间】:2011-12-19 03:58:40
【问题描述】:

我们怎样才能可靠地获得SearchResultDN

我们一直在使用SearchResult.Properties["dn"],但最近遇到了不支持此功能的安装。该客户有其他应用程序可以归结为调用 Win32 的 ldap_get_dn 方法,但在 .NET 中似乎没有与 SearchResult 等效的应用程序。

该解决方案需要跨 LDAP 服务器工作,而不是特定于 ActiveDirectory。

【问题讨论】:

  • 客户端使用什么操作系统..?您可以使用标准 DirectorySearcher 访问 AD 或 LDAP
  • @DJ KRAZE,是的,我们可以绑定到具有已知 DN 的 LDAP 并使用 DirectorySearcher 查找其他条目,但是一旦找到条目,我们需要获取该条目的 DN 和该目录没有定义实际的 DN 属性,正如我们在其他所有 LDAP 安装(数百个安装、许多不同的操作系统和 LDAP 服务器)中看到的那样。
  • 你知道他们的目录树是什么样子的吗?听起来客户没有按照预期的方式使用 AD。大约 10 个月前,我和客户遇到了类似的问题。实际上,我必须查看您所拥有的示例才能知道我有一些对我有用的代码的工作..
  • @DJ KRAZE,客户端未使用 Active Directory。我现在不知道他们在使用什么(我已经问过了,正在等待答案),但实际上这并不重要,因为该解决方案确实需要在使用许多不同 LDAP 服务器的所有客户端上工作。
  • 我知道,根据过去的经验,您可以对 LDAP 使用相同样式的搜索条件。无论情况如何,您可能需要再问一些问题。让我们了解您的发现以及我们如何提供帮助..

标签: c# active-directory ldap directoryservices


【解决方案1】:

一开始并不清楚,但后来我们发现SearchResult.Path 属性包含 DN 并且可以对其进行解析。这与我们迄今为止遇到的所有服务器一致。

SearchResult result;
...
string userDn = result.Path;

// typical Path is
// LDAP://my.ldap.server.com:39/CN=a,CN=b,OU=c
// we want to grab the part after the third '/'
int i = userDn.IndexOf('/', 7);
if (i >= 0 && userDn.Length > i + 1)
{
    userDn = userDn.Substring(i + 1);
}

SearchResult.Path 属性

http://msdn.microsoft.com/en-us/library/system.directoryservices.searchresult.path.aspx

【讨论】:

  • 但是路径也包含协议,从技术上讲它不是 DN 的一部分。
  • @ach,谢谢,我忽略了我编写的代码中将 DN 从路径中解析出来的部分。我更新了答案。
  • 这可能适用于大多数设置。但是服务器和端口并不总是存在于路径中。我认为这很棘手,因为不知道 LDAP Uri 的所有规则。我不是 LDAP 方面的专家,所以我认为最好的办法是:userDN = new Uri(result.Path).Segments.Last();
  • @ach,好点子。我们现在已经在 200 多个安装中使用了上述内容,其中包含许多随机 LDAP 服务器,并且没有遇到任何问题。当然,我们只遇到过一个与SearchResult.Properties["dn"] 存在问题的安装。
  • @AndrewHanlon new Uri(result.Path).Segments.Last(); 仅在指定服务器时才有效。如果未指定服务器,则抛出 System.UriFormatException。 “无效的 URI:无法解析主机名”正如您指出的那样,不需要服务器。
【解决方案2】:

base object 始终是一个专有名称,可通过 LDAP 搜索结果条目(但不是搜索结果引用)提供。但是,可分辨名称不是属性。

【讨论】:

    猜你喜欢
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    相关资源
    最近更新 更多