在尝试使用 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?