0

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

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

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

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

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

Итак, вопрос заключается в том, чтобы заставить его работать, как я описал его «Логически», где следует исправить проблему, и есть ли какой-то метод, который бы работал лучше, а затем еще?

ответ

0

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

+0

Мой код работал таким образом, но он не был точен все время. Пример: пользователь подключается к веб-сайту, а «IsInRole» возвращает false для группы «A». Затем пользователь добавляется в группу «А», но не выходит из своего компьютера. Пользователь снова посещает веб-сайт и «IsInRole» по-прежнему возвращает false. Чтобы избежать этой проблемы, мы подключаемся непосредственно к AD для выполнения проверки. – Peter