Получение ошибки при поиске групп AD пользователя, использующего PrincipalContext - PullRequest
0 голосов
/ 15 мая 2018

У меня есть ситуация, когда мне нужно рекурсивно находить группы AD пользователя.

Например:

I have such group hierarchy -
Group1
  |_
    Group2
      |_
        Group3
         |_
           UserA

В соответствии с иерархией, группы UserA - это Group1, Group2,Group3

Чтобы найти его с помощью кода, я использовал следующий метод:

Dim UserP1 As UserPrincipal = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, Remote_ID)
allrecursiveUserGroups = UserP1.GetAuthorizationGroups()

Этот метод даст мне все группы рекурсивно, но он не работает для одного пользователя и выдает исключение какследующее:

'System.DirectoryServices.AccountManagement.PrincipalOperationException' произошло в System.DirectoryServices.AccountManagement.dll

Дополнительная информация: при попытке получить группы авторизации выдается ошибка (1358) произошло.

Вот полное StackTrace:

System.DirectoryServices.AccountManagement.PrincipalOperationException было необработано ErrorCode = 0 HResult = -2146233087 Сообщение = При попытке получитьгруппы авторизации, произошла ошибка (1358).Source = System.DirectoryServices.AccountManagement

StackTrace: at System.DirectoryServices.AccountManagement.AuthZSet..ctor (Byte [] userSid, учетные данные NetCred, contextOptions contextOptions, строковая flatUserAuthority, StoreCtx userStoreCtxxBasex) пользовательский интерфейс StoreCtx userStoreCtxxBasextx)

в System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOfAZ (Принципал p) в System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroups ()

Другой используемый мной метод:

Это не вызывает каких-либо исключений и работает отлично для всех пользователей, но возвращает только непосредственные группы, то есть Group3 в моем случае

Проблема, с которой я сталкиваюсь с GetAuthorisationGroups, заключается в наличии специальных символов в Distinguished Name, которыеЯ получил UserPrincipal.

Проблема здесь в том, что когда [Отличительное имя] [2] из UserPrincipal содержит специальные символы (запятая в моем случае), тогда он вызывает исключение.В моем случае это отличительное имя:

CN = Smith \, John, DC = mydomain, DC = com

Здесь косая черта используется в качестве escape-символа, которыйдобавляется UserPrincipal.

Если [Отличительное имя] [2] не содержит специальных символов, функция [GetAuthorizationGroups ()] [1] работает нормально.например,

CN = Smith John, DC = mydomain, DC = com

В чем причина проблемы, и есть ли какое-либо решение для этого?

Чего мне не хватает в моем первом подходе использования метода GetAuthorizationGroups()?

В чем причина кода ошибки 1358?

Есть ли какой-либо другой хороший способ нахождения групп рекурсивно, другихчем GetAuthorisationGroups() класса UserPrincipal

...