Ich habe ein Problem bei der Verwendung der GetAuthorizationGroups-Methode der UserPrincipal-Klasse in einer Webanwendung.
Bei Verwendung des folgenden Codes erhalte ich die Meldung "Beim Versuch, die Autorisierungsgruppen abzurufen, ist ein Fehler (5) aufgetreten".
PrincipalContext context = new PrincipalContext(ContextType.Domain, null, "DC=MyCompany,DC=COM", "Benutzername", "Passwort");
UserPrincipal p = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "joe.blogs");
var groups = p.GetAuthorizationGroups();
Ich glaube, dieser Code funktioniert teilweise.
- Wenn ich das Kontext-Objekt ansehe, sehe ich, dass der Server und der Benutzername/das Passwort im Objekt korrekt aufgelöst wurden
- Wenn ich das p-Objekt ansehe, sehe ich, dass AD-Details wie Telefonnummer usw. ausgefüllt wurden.
Hier ist die Stack-Trace des Fehlers.
[PrincipalOperationException: Beim Versuch, die Autorisierungsgruppen abzurufen, ist ein Fehler (5) aufgetreten.]
System.DirectoryServices.AccountManagement.AuthZSet..ctor(Byte[] userSid, NetCred credentials, ContextOptions contextOptions, String flatUserAuthority, StoreCtx userStoreCtx, Object userCtxBase) +317279
System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOfAZ(Principal p) +441
System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroupsHelper() +78
System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroups() +11
Indem ich die Benutzername- und Passwortdetails aus dem Konstruktor von PrincipalContext entferne und den Anwendungspool (in iis7) so ändere, dass er als derselbe Benutzer (Benutzername@mycompany.com) ausgeführt wird, funktioniert der folgende Code.
PrincipalContext context = new PrincipalContext(ContextType.Domain, null, "DC=MyCompany,DC=COM");
UserPrincipal p = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "joe.blogs");
var groups = p.GetAuthorizationGroups();
Ich muss den Code im ersten Beispiel zum Laufen bringen - ich möchte den Anwendungspool nicht als Domänenbenutzer ausführen, nur um diesen Code zum Laufen zu bringen.