Обработка разрешений для вложенных групп (поставщик ролей ASP.NET)

У нас есть модуль безопасности, который на основе членства в группах / ролях контролирует права доступа к ресурсам в ASP.Net. Я создал пользовательский поставщик ролей ASP.Net, который запрашивает Active Directory о членстве в группе и который используется этим модулем.

Проверка безопасности работает следующим образом для каждого запроса (кэширование используется местами по соображениям производительности, но исключено из этого списка):

  1. Запросите AD для получения списка членов группы
  2. База данных запросов для списка пользователей и групп с доступом к запрашиваемому ресурсу
  3. Сравните результаты из AD с результатами из базы данных. Если у пользователя явно есть права или если у группы, в которой он находится, есть права, разрешите доступ, иначе нет.

Проблема возникает, когда у нас есть вложенные группы. Допустим, у нас есть две группы: ParentGroup и ChildGroup, где ChildGroup является членом ParentGroup в Active Directory и где наш пользователь является членом ChildGroup. Согласно приведенной выше логике, если мы даем ChildGroup доступ к ресурсу, тогда пользователь также может получить доступ к ресурсу.

Теперь по логике (для меня в любом случае), если мы даем ParentGroup доступ к ресурсу, тогда все члены этого и любые подгруппы и их члены, полученные рекурсивно, также должны иметь доступ к указанному ресурсу. Но вместо этого из-за того, как работает моя логика, они не могут получить доступ к ресурсу. Шаг 1 из приведенного выше списка не видит ParentGroup, он видит только ChildGroup, а Шаг 2 видит только ParentGroup и не видит ChildGroup.

Таким образом, вопрос заключается в том, чтобы заставить его работать так, как я описал "логически", где я должен решить проблему, и есть ли какой-то метод, который будет работать лучше, чем другой?

1 ответ

Попробуйте использовать метод WindowsPrincipal.IsInRole() вместо прямого запроса AD. Я разместил здесь пример кода, который может помочь.

Другие вопросы по тегам