wake-up-neo.com

Ausnahme beim Zugriff auf AD von C # aus "Ein Verweis wurde vom Server zurückgegeben"

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());
    }
}

In der Zeile SearchResultCollection results = ds.FindAll(); bekomme ich eine Ausnahme:

Ein Verweis wurde vom Server zurückgegeben

Warum bekomme ich diese Ausnahme und was bedeutet das?

19
Gilly

Dies ist die Antwort auf die Frage. Grund für die Ursache ist mein LDAP-String war falsch

    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;
4
Gilly

Wahrscheinlich war der von Ihnen angegebene Pfad nicht korrekt. Prüfe das.

Ich würde den Artikel Howto: (Fast) alles in Active Directory über C # empfehlen, was mir in der Vergangenheit im Umgang mit AD wirklich geholfen hat.

16
Fred

Ein Verweis wird von einem AD-Server gesendet, wenn die Informationen nicht selbst angefordert wurden, aber wissen, dass ein anderer Server über die Informationen verfügt. Es wird normalerweise in einer vertrauenswürdigen Umgebung angezeigt, in der ein DC auf ein DC in einer vertrauenswürdigen Domäne verweist.

In Ihrem Fall geben Sie nur eine Domäne an und verlassen sich auf die automatische Suche des zu verwendenden Domänencontrollers. Ich denke, Sie sollten herausfinden, welcher Domänencontroller für die Abfrage verwendet wird, und prüfen, ob dieser wirklich die angeforderten Informationen enthält.

Wenn Sie weitere Informationen zu Ihrem AD-Setup bereitstellen, einschließlich Vertrauensstellungen/Subdomänen, globalen Katalogen und DNS-Ressourceneinträgen für die Domänencontroller, können Sie leichter helfen.

11
Anders Abel

Möglicherweise müssen Sie ReferralChasing auch in DirectorySearcher - http://msdn.Microsoft.com/en-us/library/ms180884(VS.80).aspx aktivieren. 

3
Brian Desmond

Hatte das gleiche Problem und es geschafft, es zu lösen. 

In meinem Fall hatte ich eine AD-Gruppe in der aktuellen Anmeldedomäne mit Mitgliedern (Benutzern) aus einer Subdomäne. Der Server, auf dem der Code ausgeführt wurde, konnte nicht auf den Domänencontroller der Subdomäne zugreifen (der Server hatte zuvor noch nie auf die Subdomäne zugreifen müssen).

Ich hatte eine Weile Probleme, da mein Desktop-PC auf die Domäne zugreifen konnte, sodass alles nach OK im Plugin MMC (Active Directory-Benutzer und -Computer) aussah.

Hoffe das hilft jemand anderem.

2
Will

Ich weiß, das klingt vielleicht dumm, aber ich bin kürzlich selbst darauf gestoßen. Stellen Sie sicher, dass der Domänencontroller nicht schreibgeschützt ist.

2
Rhodesie

Ein Verweis, der vom Serverfehler zurückgegeben wurde, bedeutet normalerweise, dass die IP-Adresse nicht von der Domäne gehostet wird, die in der Verbindungszeichenfolge angegeben ist. Weitere Informationen finden Sie unter diesem Link:

Referral wurde AD Provider zurückgegeben

1
ozkary

In meinem Fall wurden mir Verweise angezeigt, als ich mit einem Konto in einer vertrauenswürdigen Domäne über SSO auf AD zugegriffen habe. Das Problem wurde behoben, als ich mich mit expliziten Anmeldeinformationen in der lokalen Domäne verband.

ich habe ersetzt

DirectoryEntry de = new DirectoryEntry("blah.com");

mit

DirectoryEntry de = new DirectoryEntry("blah.com", "[email protected]", "supersecret");

und das Problem ging weg.

0
Mike Smith