&;从服务器返回了一个推荐&;从c#访问AD时的异常
本文关键字:访问 异常 AD 返回 服务器 一个 | 更新日期: 2023-09-27 18:04:40
DirectoryEntry oDE = new DirectoryEntry("LDAP://DC=Test1,DC=Test2,DC=gov,DC=lk");
using (DirectorySearcher ds = new DirectorySearcher(oDE))
{
ds.PropertiesToLoad.Add("name");
ds.PropertiesToLoad.Add("userPrincipalName");
ds.Filter = "(&(objectClass=user))";
SearchResultCollection results = ds.FindAll();
foreach (SearchResult result in results)
{
Console.WriteLine("{0} - {1}",
result.Properties["name"][0].ToString(),
result.Properties["userPrincipalName"][0].ToString());
}
}
在SearchResultCollection results = ds.FindAll();
行,我得到一个异常:
从服务器返回一个引用
为什么我得到那个异常,它是什么意思?
您提供的路径可能不正确。检查。
我要推荐一篇文章《how: (Almost) Everything In Active Directory through c#》,这篇文章在我过去处理AD时确实帮了我很大的忙。
当AD服务器本身没有请求的信息,但知道另一台服务器有该信息时,会发送推荐。它通常出现在信任环境中,一个DC可以引用可信域中的另一个DC。
在您的情况下,您只指定一个域,依赖于自动查找要使用的域控制器。我认为您应该尝试找出用于查询的域控制器,并查看该域控制器是否真的包含所请求的信息。
如果您提供更多关于AD设置的信息,包括任何信任/子域,全局目录和域控制器的DNS资源记录,将更容易帮助您。
这就是问题的答案。原因:my LDAP string was wrong.
try
{
string adServer = ConfigurationManager.AppSettings["Server"];
string adDomain = ConfigurationManager.AppSettings["Domain"];
string adUsername = ConfigurationManager.AppSettings["AdiminUsername"];
string password = ConfigurationManager.AppSettings["Password"];
string[] dc = adDomain.Split('.');
string dcAdDomain = string.Empty;
foreach (string item in dc)
{
if (dc[dc.Length - 1].Equals(item))
dcAdDomain = dcAdDomain + "DC=" + item;
else
dcAdDomain = dcAdDomain + "DC=" + item + ",";
}
DirectoryEntry de = new DirectoryEntry("LDAP://" + adServer + "/CN=Users," + dcAdDomain, adUsername, password);
DirectorySearcher ds = new DirectorySearcher(de);
ds.SearchScope = SearchScope.Subtree;
ds.Filter = "(&(objectClass=User)(sAMAccountName=" + username + "))";
if (ds.FindOne() != null)
return true;
}
catch (Exception ex)
{
ExLog(ex);
}
return false;
您可能还需要在DirectorySearcher - http://msdn.microsoft.com/en-us/library/ms180884(VS.80).aspx上启用ReferralChasing。
有同样的问题,并设法解决它。
在我的例子中,我在当前登录域中有一个AD组,其成员(用户)来自子域。我运行代码的服务器无法访问子域的域控制器(服务器以前从未需要访问子域)。
我挣扎了一段时间,因为我的台式电脑可以访问域,所以所有在MMC插件(Active Directory Users &电脑).
希望对别人有所帮助。
我知道这可能听起来很傻,但我最近遇到了这个问题,确保域控制器不是只读的
在我的例子中,当我使用可信域中的帐户通过SSO访问AD时,我看到了推荐。当我使用本地域中的显式凭据连接时,问题就解决了。
。我取代了
DirectoryEntry de = new DirectoryEntry("blah.com");
DirectoryEntry de = new DirectoryEntry("blah.com", "someguy@blah.com", "supersecret");
,问题就解决了
从服务器错误返回的引用通常意味着IP地址不是由连接字符串上提供的域托管的。有关详细信息,请参阅此链接:
推荐被返回AD提供商
为了说明这个问题,我们定义了两个托管在不同域上的IP地址:
IP地址DC名称说明
172.1.1.10 ozkary.com生产域
172.1.30.50 ozkaryDev.com开发域
如果我们用以下格式定义LDAP连接字符串:
LDAP://172.1.1.10:389/OU =用户,DC = OZKARYDEV, DC = COM
这会产生错误,因为IP实际上在OZKARY DC上,而不是OZKARYDEV DC上。要纠正这个问题,我们需要使用与该域相关联的IP地址。
我有同样的问题,这是一个愚蠢的错误,拼错了一个DC字符串。