c # - Er der en måde at aktivere henvisningsjagt på for UserPrincipal.FindByIdentity ()?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en .NET 3.5 webapplikation, der bruger System.DirectoryServices.AccountManagement klasserne. Når jeg søger efter nogle brugere, får jeg en PrincipalOperationException: En henvisning blev returneret fra serveren. Hvis jeg gjorde det, kunne den gamle skolevej med min egen LDAP-kode muliggøre jagt af henvisninger. Skal jeg omskrive min kode?


Min kode ser sådan ud:


   using (var principalContext = new PrincipalContext(ContextType.Domain, null, adPath))
    {

        // Find the principal object for which you wish to enumerate group
        // membership.
        using (var userPrincipal = UserPrincipal.FindByIdentity(principalContext, identity))
        {
            if (userPrincipal != null)
            {
                Name = userPrincipal.DisplayName;
                DistinguishedName = userPrincipal.DistinguishedName;
                EmailAddress = userPrincipal.EmailAddress;
                Sid = userPrincipal.Sid.Value;
            }
        }
    }


Min adPath kan være en af ​​2 værdier. En af værdierne er et domæne, der for nylig blev tilsluttet, og kan fås ved hjælp af forskellige værktøjer. Jeg mener, at dette er et problem med, hvordan dette .NET-bibliotek gør LDAP-opkaldene.

Bedste reference


Her er et delvis svar, da det er for længe efter en kommentar.


Ifølge denne Microsoft-dokumentation, som du selv ved, er Henvisninger et tip, som klienten kan jage. Men hvad angår RODC tilføjer de ' For eksempel, hvis der er tale om en LDAP-applikation, hvis chase-henvisninger er aktiveret på LDAP-forbindelsen mellem klienten og RODC, kan programmet aldrig vide, at klienten modtog en henvisning fra RODC. Klienten omdirigeres automatisk til den skrivbare domænecontroller, der er angivet i henvisningen. '. [5]


Så jeg ser, hvordan du aktiverer LDAP jagter på en forbindelse i Microsofts websted, og jeg fandt dette, hvilket betyder ADSI-brug. Jeg er meget interesseret i svaret. [6]


Forsøger du at spørge det globale katalog som dette:


/* Retreiving a principal context
 */
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "YourGCServer:3268", "dc=dom,dc=fr", "User", "Password");


Det skal indeholde alle skovdomænes data.
Jeg håber det hjælper.

Andre referencer 1


Har du prøvet kode for formularen ( Indsæt domænet som det andet argument ):


var principalContext = new PrincipalContext(ContextType.Domain, "office.local", "OU=Users, DC=office, DC=local" ))


Sørg også for at adPath er fra mest specifikke til mindst specifikke.