我面临的情况是我需要访问用户的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的示例。感激如果有人能给我一个正确方向的推动。
答案 0 :(得分:1)
我明白了:
var root = new DirectoryEntry(string.Format("LDAP://mydc.mydomain.com/<SID={0}>", sid));