В нашей системе мы читаем группы безопасности пользователей из Active Directory двумя немного разными способами.В одном случае в списке групп, возвращаемых AD, отсутствуют доменные локальные группы.Ответ от GetAuthorizationGroups () зависит от используемого PrincipalContext.В неудачных сценариях GetAuthorizationGroups () будет возвращать только глобальные группы.В результате отсутствуют все локальные группы домена из AD.Кто-нибудь может объяснить, почему?
Неудачное решение:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "our.domain.net");
var userPrincipal = UserPrincipal.FindByIdentity(ctx, IdentityType.UserPrincipalName, "userB");
PrincipalSearchResult<Principal> groups = userPrincipal.GetAuthorizationGroups();
В этом случае процесс выполняется «UserA».«UserA» является членом домена «our.domain.net».«UserA» - это тот же пользователь, что и конкретно идентифицированный пользователь в рабочем решении.Из-за этого PrincipalContext должен быть идентичен PrincipalContext в рабочем решении.Ответ от GetAuthorizationGroups () в этом решении пропускает локальные группы домена из AD.
Рабочее решение:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "our.domain.net", "UserA", "PasswordA");
var userPrincipal = UserPrincipal.FindByIdentity(ctx, IdentityType.UserPrincipalName, "userB");
PrincipalSearchResult<Principal> groups = userPrincipal.GetAuthorizationGroups();
В этом случае вызывающий пользователь идентифицируется конкретно по имени пользователя и паролю, когдасоздание основного контекста.В этом случае AD возвращает все группы, в которые входит пользователь.Это поведение, которое я хотел бы увидеть и в неудачном решении.В некоторых случаях у меня нет пароля пользователя UserA, и по этой причине рабочее решение недоступно.
Пожалуйста, помогите мне понять, почему отказавшее решение не возвращает все группы, членом которых является пользователь.из.