DirectorySearcher 默认为生产 Active Directory,即使我传入了 Dev LDAP (edir) 服务器 IP

DirectorySearcher defaulting to Production Active Directory even though I'm passing in the Dev LDAP (edir) Server IP

我在尝试使用 DirectoryServices 连接到 edirectory 时注意到一个有趣的行为。

这是我用来从我们的开发目录中提取信息的代码,但我注意到它正在从我们的生产 Active Directory 中检索信息(据我所知,DirectorySearcher 也可以用于 edir ):

string devIP = "xxx.xxx.xxx.xxx:636";
DirectorySearcher directorySearcher = new DirectorySearcher(devIP);
directorySearcher.Filter = "(&(objectClass=user)(uid=" + "jsmith" + "))";
SearchResultCollection searchResults = directorySearcher.FindAll();

(我知道它正在生产,因为 jsmith 在开发中不存在。我注意到的另一件事是返回的属性是 AD 属性,如 memberOf 等)

最终使它起作用的是使用 System.DirectoryServices.Protocols:

LdapConnection con = new LdapConnection(new LdapDirectoryIdentifier("d1.domain.com:636"));
con.Credential = new NetworkCredential("cn=USERNAME,ou=XXX,o=XXX", "password");
con.SessionOptions.SecureSocketLayer = true;
con.SessionOptions.VerifyServerCertificate = new VerifyServerCertificateCallback(ServerCallback);
con.AuthType = AuthType.Basic;
using (con)
{
  con.Bind();
}

我做了一些研究,但我无法弄清楚为什么即使我明确指定了 IP 地址和用户名,它也会将 DirectorySearcher 路由到 prod?

开发服务器与我的本地计算机位于不同的域中(我是 运行 本地计算机上的代码)。有没有可能因为我的机器与 prod 在同一个域中,所以它默认为 prod Active Directory 而只是忽略了我传递给它的 devIP?

与以下相同的根本原因:

Check if the DirectoryEntry is valid in DirectorySearcher

您使用的构造函数 DirectorySearcher(string) 实际上需要过滤器,而不是搜索根路径。