【发布时间】:2017-09-02 22:53:00
【问题描述】:
我面临的情况是我需要从未加入域的 DMZ 中的 Web 服务器访问用户及其所属组的 Active Directory 属性。为此,我们的基础架构团队已经打开了到一个特定域控制器的 LDAPS 连接,我可以通过它的 DNS 名称来调用它。 (我最初使用 PrincipalContext 编写此代码,但这会生成对其他域控制器的引用查询,并且由于防火墙限制而失败,因此我将下降到较低级别的 DirectoryServices API)。
具体来说,我想要做的是向特定域控制器询问一个安全组的成员列表,该安全组的 SID 作为字符串。
我可以像这样连接到特定的域控制器来创建一个根目录条目:
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 的示例。如果有人能在正确的方向上帮助我,不胜感激。
【问题讨论】:
标签: c# active-directory ldap directoryservices