如何为用户或组构建具有特定域控制器和SID的DirectoryEntry?

时间:2017-04-07 14:00:33

标签: c# active-directory ldap directoryservices

我面临的情况是我需要访问用户的Active Directory属性以及他们所属的组来自未加入域的DMZ中的Web服务器。我们的基础架构团队为此目的打开了与一个特定域控制器的LDAPS连接,我可以通过它的DNS名称来调用它。 (我最初使用PrincipalContext编写此代码,但是由于防火墙的限制,这会生成对其他域控制器的引用查询并失败,因此我将下载到较低级别的DirectoryServices API。

具体而言,我希望能够向特定的域控制器询问一个安全组成员列表,其中我的SID是一个字符串。

我可以连接到特定的域控制器来创建这样的根DirectoryEntry:

var root = new DirectoryEntry("LDAP://mydc.mydomain.com");

...从那里我可以创建一个DirectorySearcher来按名称搜索一个组:

var searcher = new DirectorySearcher(root) {
    Filter = "(&(object=(objectCategory=group)(cn=Group Name))"
}

这很好用,但我很难找到一个等效的SID搜索语法。我发现的大多数线程都建议使用这种语法直接基于SID本身实例化DirectoryEntry:

new DirectoryEntry(string.Format("LDAP://<SID={0}>", sid))

...但我找不到任何可以指定用于搜索的域控制器和要搜索的SID的示例。感激如果有人能给我一个正确方向的推动。

1 个答案:

答案 0 :(得分:1)

我明白了:

var root = new DirectoryEntry(string.Format("LDAP://mydc.mydomain.com/<SID={0}>", sid));