У меня проблема с использованием метода GetAuthorizationGroups класса UserPrincipal в веб-приложении.
Используя следующий код, я получаю сообщение «При попытке получить группы авторизации произошла ошибка (5)»
PrincipalContext context = new PrincipalContext(ContextType.Domain, null, "DC=MyCompany,DC=COM", "username", "password");
UserPrincipal p = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "joe.blogs");
var groups = p.GetAuthorizationGroups();
Я считаю, что этот код работает до определенной степени.
- Когда я просматриваю объект контекста, я вижу, что сервер и имя пользователя / пароль были правильно разрешены в объекте
- Когда я просматриваю объект p, я вижу, что данные AD были заполнены, как номер телефона и т. Д.
Вот трассировка стека от ошибки.
[PrincipalOperationException: While trying to retrieve the authorization groups, an error (5) occurred.]
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
Если удалить имя пользователя и пароль из конструктора PrincipalContext и изменить пул приложений (в iis7) для запуска под тем же пользователем (username@mycompany.com) - работает следующий код.
PrincipalContext context = new PrincipalContext(ContextType.Domain, null, "DC=MyCompany,DC=COM");
UserPrincipal p = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "joe.blogs");
var groups = p.GetAuthorizationGroups();
Мне нужно, чтобы код в первом примере работал - я не хочу запускать пул приложений от имени пользователя домена только для того, чтобы этот код работал.