Обработка разрешений для вложенных групп (поставщик ролей ASP.NET)
У нас есть модуль безопасности, который на основе членства в группах / ролях контролирует права доступа к ресурсам в ASP.Net. Я создал пользовательский поставщик ролей ASP.Net, который запрашивает Active Directory о членстве в группе и который используется этим модулем.
Проверка безопасности работает следующим образом для каждого запроса (кэширование используется местами по соображениям производительности, но исключено из этого списка):
- Запросите AD для получения списка членов группы
- База данных запросов для списка пользователей и групп с доступом к запрашиваемому ресурсу
- Сравните результаты из AD с результатами из базы данных. Если у пользователя явно есть права или если у группы, в которой он находится, есть права, разрешите доступ, иначе нет.
Проблема возникает, когда у нас есть вложенные группы. Допустим, у нас есть две группы: ParentGroup и ChildGroup, где ChildGroup является членом ParentGroup в Active Directory и где наш пользователь является членом ChildGroup. Согласно приведенной выше логике, если мы даем ChildGroup доступ к ресурсу, тогда пользователь также может получить доступ к ресурсу.
Теперь по логике (для меня в любом случае), если мы даем ParentGroup доступ к ресурсу, тогда все члены этого и любые подгруппы и их члены, полученные рекурсивно, также должны иметь доступ к указанному ресурсу. Но вместо этого из-за того, как работает моя логика, они не могут получить доступ к ресурсу. Шаг 1 из приведенного выше списка не видит ParentGroup, он видит только ChildGroup, а Шаг 2 видит только ParentGroup и не видит ChildGroup.
Таким образом, вопрос заключается в том, чтобы заставить его работать так, как я описал "логически", где я должен решить проблему, и есть ли какой-то метод, который будет работать лучше, чем другой?
1 ответ
Попробуйте использовать метод WindowsPrincipal.IsInRole() вместо прямого запроса AD. Я разместил здесь пример кода, который может помочь.