Перечисление групп с использованием WindowsIdentity.GetCurrent () возвращает старый набор групп - PullRequest
4 голосов
/ 02 февраля 2011

У меня есть пользователь, который, когда я пытаюсь перечислить ее группы, используя System.Security.Principal.WindowsIdentity.GetCurrent().Groups на компьютере пользователя или System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups на сервере IIS, я получаю список их старых групп, а не их новых.

Я проверил контроллер домена, к которому они аутентифицируются, и страница ASP.NET работает внутри экземпляра SharePoint, поэтому наиболее подходящий LogonUserIdentity предоставляется оттуда билет Kerberos.

Должен ли я искать группы непосредственно изAD вместо того, чтобы полагаться на WindowsIdentity или LogonUserIdentity?

1 Ответ

5 голосов
/ 02 февраля 2011

Если вы используете WindowsIdentity или LogonUserIdentity, он получит информацию о группе из данных авторизации, хранящихся в билете выдачи билетов Kerberos (TGT).

Это мощный и полезный инструмент, поскольку после проверки подлинности и получения Kerberos TGT вам не нужно снова запрашивать Active Directory, чтобы получить всю информацию о группе. На самом деле, групповое перечисление довольно дорого и сложно. Таким образом, подход к билетам Kerberos является предпочтительным, и этот подход используется при доступе к любым ресурсам Windows.

Однако это также означает, что после добавления учетной записи пользователя в группу, подход WindowsIdentity или LogonUserIdentity не будет знать вновь добавленные группы. Вы должны очистить свой билет Kerberos и получить его снова. Вы можете выйти из системы, а затем войти в систему или заблокировать экран и ввести пароль, чтобы разблокировать экран.

Если по каким-то причинам вы все еще хотите выполнить перечисление групп самостоятельно, я рекомендую вам использовать UserPrincipal.GetAuthorizationGroups в .NET 3.5. Возвращает все группы безопасности, к которым принадлежит пользователь.

...