Пользователь ASP.NET не показывает все группы Active Directory - PullRequest
3 голосов
/ 07 января 2012

Я пытаюсь использовать проверку подлинности Windows и группы активных каталогов для управления безопасностью в приложении. Проблема, с которой я сталкиваюсь, состоит в том, что в коде страницы, которую я пытаюсь проверить, пользователь, заходящий на сайт ASP.NET, является членом определенной группы AD и затем показывает / скрывает несколько элементов на основе этого. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить все группы, в которые входит пользователь, для тестирования. Я включил код ниже, который я использую, чтобы перечислить все группы, к которым принадлежит пользователь. Этот код возвращает несколько групп, однако он не возвращает все группы. Я проверил в контроллере AD, что все группы выглядят одинаково. Есть идеи, что я делаю не так?

Private Function GetCurrentGroups() As ArrayList
    Dim groups As New ArrayList()
    For Each group As System.Security.Principal.IdentityReference In System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups
        groups.Add(group.Translate(GetType(System.Security.Principal.NTAccount)).ToString())
    Next

    groups.Sort()

    Return groups
End Function

Ответы [ 2 ]

7 голосов
/ 07 января 2012

Вы не делаете ничего плохого - скорее всего, вы видите только прямое членство в группах вашего пользователя.

Любое вложенное членство - User член GroupA, который, в свою очередь, является членом GroupB - обычно не отображается - поэтому в этом случае вы увидите GroupA, но не GroupB.

Если вам действительно нужна эта информация, вам придется напрямую опросить Active Directory (используя что-то вроде System.DirectoryServices.AccountManagement пространства имен - отличная статья MSDN об использовании ).

Пространство имен S.DS.AM содержит, помимо прочего, класс UserPrincipal, представляющий пользователя в AD, и этот класс имеет метод с именем .GetAuthorizationGroups(), который будет возвращать все группы пользователь является членом, включая вложенные группы.

0 голосов
/ 01 августа 2014

Другая возможность заключается в следующем.Предположим, что группа AD является G и находится в домене A . Пользователь U в домене B является членом .G (это возможно в универсальных группах) Если A доверяет B , но НЕ наоборот, вызов G.GetMembers вернет пользователя.Тем не менее, если вы позвоните U.GetGroups вернется не возвращать группу AD в домене A .

...