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;
}
InformationsquelleAutor der Frage Pynt | 2013-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich einfach das gleiche Problem und die info, die ich haben es geschafft, die Spur kann hilfreich sein; wie oben haben wir gesehen, dass dieses problem, wenn der Domänencontroller ausgeführt wird Server 2012 - zunächst mit einem Kunden-Bereitstellung und dann repliziert auf unser eigenes Netzwerk.
Nach einigen Experimenten haben wir festgestellt, dass unser code würde gut laufen auf Server 2012, traf aber das 1301 Fehler-code, wenn das client-system läuft Server 2008. Die wichtigsten Informationen über das, was geschehen war, war das hier gefunden:
MS-blog übersetzt von Deutsch
Den hotfix gemäß den unten stehenden link hat das problem gelöst hat, auf unserem test-system
SID S-1-18-1 und SID S-1-18-2 kann nicht zugeordnet werden
Hoffe, das ist hilfreich für jemanden! Wie viele bemerkt haben diese Methode aufrufen, erscheint eher fragil und werden wir wahrscheinlich Blick auf die Umsetzung einige alternativen Ansatz, bevor wir uns auf andere Themen.
Gary
InformationsquelleAutor der Antwort Gary Hill
Erlebten wir dieses Problem auf, wenn unser Infrastruktur-team brachte 2012 Domain Controller online. Wir hatten auch pre-2012-DCs vorhanden und so erlebten wir das Problem zeitweise. Wir kamen mit einem Update, das wollte ich teilen - es hat 2 Teile.
Erstens, installieren Sie die hotfix erwähnt von Gary Hill. Dies beheben Sie das folgende Problem:
Dachten wir, wir waren zu Hause, frei nach der Installation dieses hotfix. Jedoch, nachdem es installiert wurde, bekamen wir ein anderes intermittierende Fehler. Bestimmte Gruppen, dass wir die Befragung hatte eine null -
sAMAccountName
Eigenschaft. Die eigentliche Eigenschaft war besiedelten im Active Directory, aber es war falsch zurückgegeben wird, wobei ein null-Wert von der API. Ich nehme an, dies ist ein Fehler irgendwo in den Active Directory-API, aber ich weiß nicht mehr als das.Glücklicherweise konnten wir das Problem umgehen, durch den Wechsel zu verwenden, die Gruppe
Name
- Eigenschaft anstelle dersAMAccountName
Eigenschaft. Dieser arbeitete für uns. Ich glaube, dasssAMAccountName
ist effektiv veraltet und existiert nur zur Abwärtskompatibilität Gründen. Dieses sein der Fall, es schien eine vernünftige änderung zu stellen.Ich lege eine abgespeckte version unserer
GetRolesForUser
- code zu demonstrieren, die ändern an Ort und Stelle.Hoffe, das hilft.
InformationsquelleAutor der Antwort
Hier ist meine Lösung. Es scheint zu funktionieren durchweg gut. Weil das problem tritt bei der Iteration über die Kollektion, die ich verwenden einen anderen Ansatz bei der Iteration um die Ausnahme behandeln, ohne zu blockieren die eigentliche Iteration:
InformationsquelleAutor der Antwort AlishahNovin
Habe ich erlebt, error code 1301 mit
UserPrincipal.GetAuthorizationGroups
während der Verwendung einer Marke neue virtuelle Entwicklung-Domäne, die enthalten sind 2 workstations und 50 Benutzer/Gruppen (viele von denen sind, die gebaut sind). Wir wurden mit Windows Server 2012 R2 Essentials mit zwei Windows 8.1 Enterprise-workstations der Domäne.War ich in der Lage, rekursiv erhalten Sie eine Liste der Gruppenmitgliedschaft eines Benutzers mit dem folgenden code:
InformationsquelleAutor der Antwort TS12
Ich bin in einer Umgebung mit mehreren Domänen, forests und Vertrauensstellungen. Ich habe so ziemlich das exakt gleiche code läuft auf einer web-site form verwendet, um Benutzer-security-group-lookups, die in den verschiedenen Domänen.
Bekomme ich die genaue Fehler in einem der sehr großen Bereiche, in denen die Mitgliedschaft in der Gruppe können gehören 50+ verschiedene Gruppen. Es funktioniert in anderen Domänen Wälder.
In meiner Forschung fand ich einen thread, der sieht nicht in Zusammenhang stehen, tatsächlich aber hat die gleiche stack-trace. Es ist für eine remote-Anwendung läuft auf dem SBS. Der thread wird erwähnt, dass der Fehler verursacht wird, durch unauflöslicher SIDS in einer Gruppe. Ich glaube, diese würden das sein, was sind bekannt als "veraltet" SIDS im active directory. Siehe den thread hier.
Den thread schlägt vor, dass die Suche nach veraltet enteries und entfernen Sie Sie aus den Gruppen, die das problem löst. Ist es möglich die Fehlermeldung, die Sie erhalten ist, da SIDS sind immer veraltet alle 12 Stunden durch einen separaten unabhängigen Prozess? Letztlich, ich glaube, das ist ein bug im framework, und die Methode sollte nicht Abstürzen, weil veraltet/Regional SIDS.
Glück!
InformationsquelleAutor der Antwort Bri
Wenn jemand interessiert ist, dies ist ein VB.NET version des gleichen Codes.
Einige Dinge, die Sie tun, bevor Sie diesen code arbeiten können
1) Sie haben Verweis auf die assembly System.DirectoryServices
2) Stellen Sie sicher, dass pass "theusername" variable ohne die domain, also wenn Ihre domain "GIS" und Ihr Benutzername ist "Hussein" Windows in der Regel authentifizieren, die Sie als GIS - \ - Hussein. So haben Sie zu senden, in nur rein der username "Hussein". Ich arbeitete zu dem Fall empfindliche Sachen.
3) Die Methode GetGroupsNew nimmt einen Benutzernamen und gibt eine Liste der Gruppen
4) Die Methode isMemberofnew nimmt Sie einen Benutzernamen und ein Gruppe und überprüft, ob dieser Benutzer ist Teil dieser Gruppe ist oder nicht, das ist die, die ich interessiert war.
InformationsquelleAutor der Antwort Hussein Nasser
wir hatten ein ähnliches Problem nach der Aktualisierung der Domänencontroller auf 2012. Plötzlich mein Aufruf an Benutzer.GetAuthorizationGroups() gestartet scheitern, ich war immer die gleiche Ausnahme, die Sie waren (Fehler 1301). So, ich habe es auf Benutzer.Methoden getgroups(). Das klappte für eine Weile, dann begann scheitern zeitweise auf "bad username or password". Meine neueste Abhilfe erscheint, um es zu beheben, für den moment zumindest. Anstelle von aufrufen, nach der Erstellung der Benutzer-Objekt, das ich auch konstruieren, eine Gruppe-Objekt, eine für jede Gruppe, die ich sehen wollen, wenn der Benutzer Mitglied ist. ie, "user.IsMemberOf(Gruppe)". Das scheint zu funktionieren.
InformationsquelleAutor der Antwort David Barrows
Hatte ich die gleiche exception. Wenn jemand nicht will, verwendet "LDAP", verwenden Sie diesen code. Ursache, die ich bin, hatte, verschachtelte Gruppen, die ich gewohnt bin GetMembers(true) und es ist etwas länger, in der Zeit, als GetMembers().
https://stackoverflow.com/a/27548271/1857271
oder download der fix von hier: http://support.microsoft.com/kb/2830145
InformationsquelleAutor der Antwort Nazar Iaremii
Vor dem gleichen problem auflisten Berechtigungsgruppen und die patches bereits in der Antwort nicht gelten zu unserem web-server.
Manuell auflisten und ignorieren die Probleme verursachen Gruppen gut funktioniert, aber:
InformationsquelleAutor der Antwort davidmdem