UserPrincipals.GetAuthorizationGroups Beim Auflisten der Gruppen ist ein Fehler aufgetreten (1301). Nach dem Upgrade auf Server 2012 Domain Controller

Forschung:

Ähnliches Problem mit workaround, aber nicht die tatsächliche Lösung der bestehenden Probleme

Ähnliches Problem verweist Microsoft Endpunkt update als übeltäter

Die links oben, sind die meisten geeignet, um zu meinem problem, ich habe auch eingesehen jede ähnliche Frage aufgeführt, die durch Stack-Überlauf bei der Erstellung dieses post, und nur die oben genannten Fragen passen zu meinem Problem.

Hintergrund:

Ich habe mit UserPrincipal.GetAuthorizationGroups für Berechtigungen für bestimmte Seite Zugriff mit IIS 7.5 auf Server 2008 R2 in einer C#.NET 4.0 web forms-Seite für 2 und eine halbe Jahre. Auf 15 Mai 2013 haben wir entfernt eine primäre Domänencontroller unter Server 2008 (nicht r2) und ersetzt es mit einem Server 2012 Domain Controller. Am nächsten Tag begannen wir empfangen die Ausnahme unten aufgeführt.

Ich benutze Wichtigsten Kontext für die Formularauthentifizierung. Die Benutzername/Passwort-handshake erfolgreich ist, und das auth-cookie wird richtig gesetzt, aber die nachfolgenden Wichtigsten Kontext zu nennen, dass auch Anrufe UserPrincipal.GetAuthorizationGroups versagt zeitweise. Wir haben uns entschlossen ein paar BPA-Probleme, erschienen in Server 2012 Domain Controller, aber dieser hat noch das Problem zu beheben. Ich führte auch ein cron läuft auf zwei getrennten Servern. Die beiden Server nicht in die Gruppe SID Auflösung zu unterschiedlichen Zeiten, obwohl Sie die gleiche code-Basis. (Eine dev-Umgebung und Produktionsumgebung).

Das Problem löst sich vorübergehend auf web-server neu zu starten, und auch auf dem dev-server wird es lösen sich nach 12 Stunden nicht funktionieren. Die Produktions-server werden in der Regel nicht mehr ordnungsgemäß ausgeführt, bis ein Neustart ohne die Lösung selbst.

In diesem Punkt, den ich versuche zu verfeinern, die cron-targeting bestimmter Domänen-Controller im Netzwerk, als auch das neue DC-und der standard-LDAP-Abfrage, die derzeit nicht in der Ausbeute mehr gezielte Ausnahme mal. So weit wir gefunden haben, auf einem web-server, dass es kein Muster gibt an dem Tage, an dem es scheitert, aber es wird sich erholen und innerhalb von etwa 12 Stunden. Die neuesten Ergebnisse zeigen-Gruppe, SID-Auflösungsfehler zwischen 8AM-8PM, dann ist es wieder erholt, einige Tage später wird es scheitern, at 8pm wiederherzustellen und um 8 Uhr dann gut laufen für weitere 12 Stunden, und wieder scheitern. Wir hoffen, um zu sehen, wenn es nur eine bestimmte server-Kommunikation-Problem oder um zu sehen, ob es ist die gesamte Gruppe der Domänencontroller.

Ausnahme:

Exception information: 
Exception type: PrincipalOperationException 
Exception message: An error (1301) occurred while enumerating the groups.  
The group's SID could not be resolved.
at System.DirectoryServices.AccountManagement.SidList.TranslateSids(String target, IntPtr[] pSids)
at System.DirectoryServices.AccountManagement.SidList..ctor(SID_AND_ATTR[] sidAndAttr)
at System.DirectoryServices.AccountManagement.AuthZSet..ctor(Byte[] userSid, NetCred credentials, ContextOptions contextOptions, String flatUserAuthority, StoreCtx userStoreCtx, Object userCtxBase)
at System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOfAZ(Principal p)
at System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroups()

Frage:

Angesichts der oben genannten Informationen, hat jemand eine Idee, warum die Stilllegung der Windows Server 2008 (nicht r2) und die Implementierung einer neuen Server 2012 DC verursachen würde UserPrincipal.GetAuthorizationGroups fail mit der 1301 SID Auflösung Fehler?
Ideen, die auf die Beseitigung der möglichen Ursachen würde auch geschätzt werden.

Haftungsausschluss:

Dies ist mein Erster Beitrag Stack Overflow, habe ich oft die Forschung hier aber noch nicht beigetreten sind, in den Diskussionen bis jetzt. Verzeihen Sie mir, wenn ich anderswo gepostet und fühlen sich frei, darauf hinweisen, bessere Schritte vor der Veröffentlichung.

UPDATE 13-JUN-2013:

Am 12 Juni habe ich angesprochen, die Möglichkeit, Gegenstände, die nicht entsorgt das Problem verursacht.
Der Zeitrahmen ist zu kurz, um festzustellen, ob der eingestellte code hat das Problem behoben wurde, aber ich werde auch weiterhin zu aktualisieren, wie wir arbeiten, in Richtung einer Auflösung, so dass vielleicht mit etwas Glück, jemand hier kann selbst hand anlegen.

Original-Code

    public bool isGroupMember(string userName, ArrayList groupList)
    {
        bool valid = false;

            PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domain_server + ".domain.org:636", null, ContextOptions.Negotiate | ContextOptions.SecureSocketLayer);

            //find the user in the identity store
            UserPrincipal user =
                UserPrincipal.FindByIdentity(
                    ctx,
                    userName);

            //get the groups for the user principal and
            //store the results in a PrincipalSearchResult object
            PrincipalSearchResult<Principal> groups =
                user.GetAuthorizationGroups();

            //display the names of the groups to which the
            //user belongs
            foreach (Principal group in groups)
            {
                foreach (string groupName in groupList)
                {
                    if (group.ToString() == groupName)
                    {
                        valid = true;
                    }
                }

            }
        return valid;
    }

Aktualisierten Code

        public bool isGroupMember(string userName, ArrayList groupList, string domain_server)
        {
        bool valid = false;

            try
            {

                using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domain_server + ".domain.org:636", null, ContextOptions.Negotiate | ContextOptions.SecureSocketLayer))
                {

                    //find the user in the identity store
                    UserPrincipal user =
                        UserPrincipal.FindByIdentity(
                            ctx,
                            userName);

                    try
                    {
                        //get the groups for the user principal and
                        //store the results in a PrincipalSearchResult object
                        using (PrincipalSearchResult<Principal> groups = user.GetAuthorizationGroups())
                        {
                            //display the names of the groups to which the
                            //user belongs

                            foreach (Principal group in groups)
                            {
                                foreach (string groupName in groupList)
                                {

                                    if (group.ToString() == groupName)
                                    {
                                        valid = true;
                                    }
                                }

                                group.Dispose();

                            }
                        }//end using-2
                    }
                    catch
                    {
                        log_gen("arbitrary info");
                        return false;
                    }
                }//end using-1
            }
            catch
            {
                log_gen("arbitrary info");
                return false;
            }

        return valid;

    }
Kommentar zu dem Problem
Update: möglicherweise gibt Es ein Problem mit nicht entsorgen PrincipalSearchResult. Obwohl, ich bin mir nicht sicher, warum es würde genau jetzt ein Problem nach zwei Jahren. Ich bin derzeit eingeblendet, die die iEnumerable-Elemente in [mit] Anweisungen, während Sie versuchen, die Spur zu Themen, die über perfmon. Ressource auf Leck Kommentarautor: Pynt
Update: hatte Noch ein paar Stückchen code, wurden nicht ordnungsgemäß entsorgt. Heute aktualisiert und wird auch weiterhin zu überwachen das Problem. Die Gruppe SID enumeration Fehler aufgetreten ist, alle 12 Stunden über das Wochenende, und löste sich alle 12 Stunden. Wir haben noch mehr Variablen, die Frage, die ich fälschlicherweise geschrieben wie "Mai 14", aber tatsächlich begann am "16. Mai", eine Vielzahl von .NET updates installiert wurden auf der 15th via windows update. Kommentarautor: Pynt
Update: Dur-code re-factoring als ich mehr über die richtige Entsorgung. Ich bin noch neu in C# und vererbt dieses Projekt so ein gutes Stück zu aktualisieren. Das Problem ist immer noch vorhanden, und ich bin immer noch optimieren von code auf das beste zu hoffen. Irgendwann werde ich die Rolle zurück .NET-updates, die installiert wurden auf der 15th Mai und sehen, ob die Dinge auszubügeln, aber jetzt werde ich weiterhin richtig schlecht umgesetzt-code. Kommentarautor: Pynt
Update: Der dev-server wurde eine stabile für 8 Tage, im Gegensatz zu unten gehen alle paar Tage. Die Produktion der server ist noch funktionsfähig furchtbar. Der 12-Stunden-fail-Fenster immer noch hält stark. Ein reboot, gestern um 7:48 UHR, um die Funktionalität wiederherzustellen war, gefolgt von ungefähr 12 Stunden später, um 7:54 PM wodurch die Fehlermeldung wieder. knallt Schädel in Schreibtisch Kommentarautor: Pynt
Wir haben das gleiche Problem vor wenigen Wochen. Wie ich lese deine Geschichte und die verschiedenen Antworten, ich kann bestätigen, dass das problem wahrscheinlich die eine Spitze von @Gary Hill unter. Wir haben einen dev-server auf 2008 R2 und eine prod-server im Jahr 2012. Eines Tages werden wir implementiert einige Rechte, die nach AD-Gruppen. Es funktionierte gut auf 2012, aber unser dev-server zum scheitern verurteilt war. Wir fanden heraus, dass, wenn wir implementierten ein neues sekundäres AD-server auf 2012, der dev-server verbunden war, während die anderen Server verbunden PV AD 2008 R2 waren in Ordnung. Und auch erklären, einige der Probleme, die wir erlebt zwischen 2 AD. Kommentarautor: Gregoire D.

InformationsquelleAutor der Frage Pynt | 2013-06-10

Schreibe einen Kommentar