0

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

这是我用来从我们的 dev 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 在 dev 中不存在。我注意到的另一件事是返回的属性是 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?

4

1 回答 1

0

与以下相同的根本原因:

检查 DirectoryEntry 在 DirectorySearcher 中是否有效

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

于 2015-01-29T07:40:24.470 回答