&;从服务器返回了一个推荐&;从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();行,我得到一个异常:

从服务器返回一个引用

为什么我得到那个异常,它是什么意思?

&;从服务器返回了一个推荐&;从c#访问AD时的异常

您提供的路径可能不正确。检查。

我要推荐一篇文章《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字符串。