【问题标题】:Search in global catalog of AD Forest在 AD Forest 的全局目录中搜索
【发布时间】:2018-03-20 10:55:20
【问题描述】:

我需要对 Forest 的所有 DC 进行 LDAP 查询。我找到了类似的post,代码如下:

using (Forest currentForest = Forest.GetCurrentForest())
{
    using (GlobalCatalog globalCatalog = currentForest.FindGlobalCatalog())
    {
        using (DirectorySearcher searcher = globalCatalog.GetDirectorySearcher())
        {
            searcher.Filter = "filter to verify existence of user account according to supplied sid";
            SearchResult result = searcher.FindOne();
            return (result != null);
        }
    }
}

以上代码适用于我的测试场景。这是跨域查询信息的正确方法吗?还有很多其他帖子,他们手动输入 GC 位置或搜索域列表。因此,有什么我应该注意的或者这段代码可能出错的地方吗?

【问题讨论】:

  • 在您的情况下建议使用 GC。在多站点环境中,您需要遍历全局目录以确保用户存在。请注意,只有一部分用户属性存储在 GC 中。 ObjectSid 属性存在。

标签: c# windows server active-directory ldap


【解决方案1】:

使用System.DirectoryServices.ActiveDirectory.ForestDomains 属性遍历域,然后使用System.DirectoryServices.ActiveDirectory.DomainDomainControllers 属性遍历域控制器,在每个控制器上运行您想要的任何查询。

【讨论】:

  • 使用全局目录有什么问题吗?它似乎更有效,因为应该始终有一个并包含来自所有 DC 的数据副本。
  • @Geralt 不,但您说您需要查询所有域控制器。如果您只需要查询每个域,则可以根据需要使用 GC,但请记住,您可以拥有多个 GC,并且 AD 中的某些信息不会复制,因此在每个 DC 上都不同。例如帐户登录时间和锁定。
  • 我明白了。我需要根据来自其他地方的 sid 来验证用户的存在。我希望并且想要验证这些信息在 GC 中是否可用,并且可以从那里的所有域中复制。如果有更多的 GC,我被引导相信他们应该持有相同信息的副本。
  • 您可以检查用户是否存在于任何 DC,但如果您在创建用户的同时进行检查,则需要考虑复制时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 2010-09-22
  • 2016-12-30
  • 1970-01-01
相关资源
最近更新 更多