Является ли безопасность на основе ролей ASP.NET настоящей системой контроля доступа на основе ролей?

Из того, что я прочитал из этот документ Я понимаю, что система на основе контроля доступа роль одна, где пользователи могут быть назначены роли где роли определяют разрешения для выполнения операций с объектами. Но в asp.net мы не указываем «Операции с объектами», я имею в виду, что как мы можем указать «Все пользователи в роли R могут выполнять удаление объекта O» Где находится Объектная часть в ASP.Net


person taher chhabrawala    schedule 26.04.2011    source источник


Ответы (4)


Модель безопасности asp.net довольно ограничена. По сути, у вас есть контроль только на уровне ролей. Это означает, что для любой операции вы должны проверить, является ли пользователь какой-либо из ролей, которым вы хотите разрешить выполнение этой операции.

Мы пошли по пути определения нашей собственной модели, которая дает гораздо большую детализацию. В основном мы определяем операции и назначаем эти операции различным ролям. Таким образом, мы можем проверить, есть ли у них право «удалить учетную запись», по сравнению с тестированием, если они находятся в «Администраторе», «Администраторе учетной записи» или в любом количестве других ролей. Это очень похоже на то, как работает Active Directory. Кроме того, это позволяет нам перенастраивать роли по мере необходимости.

В составе Windows есть компонент под названием Authorization Manager (AzMan). Он может работать с вашим поставщиком членства, чтобы обеспечить контроль уровня работы. Некоторым это удалось, но другие жаловались, что с этим трудно приступить к работе. Мы использовали его около 5 лет назад в одном проекте, и в то время он работал около 95% времени. У остальных 5% были проблемы со связью с нашим контроллером AD.

Это приводит нас к вашему вопросу: является ли встроенный поставщик членства в ASP.Net настоящей системой контроля доступа на основе ролей? Нет. Это позволяет вам определять роли, а не операции.

person NotMe    schedule 26.04.2011
comment
+1 для азмана. Используем уже несколько лет, и это очень удобно. Единственная проблема, с которой мы столкнулись, заключалась в том, что AzMan открыл исключительно xml-магазин. Но последняя версия поддерживает SQL Server в качестве хранилища, и это здорово. (Мы не могли использовать ADAM по нескольким причинам.) - person Dmitry; 26.04.2011
comment
В вашем ответе есть хороший совет, но я не согласен, когда вы говорите, что безопасность на основе ролей ASP.Net - это система RBAC. Он не поддерживает определение операций для вашего приложения или сопоставление операций с ролями. Он позволяет только назначать роли и проверять членство в ролях. Остальное остается на усмотрение разработчика. - person Brian Cauthon; 26.04.2011
comment
@ Брайан Каутон: Вы правы. Я немного подробнее рассмотрел истинное определение RBAC и соответствующим образом обновил свой ответ. - person NotMe; 26.04.2011
comment
@taher: Я не уверен, зачем вам нужен azman с открытым исходным кодом .. Он входит в состав Windows как минимум с 2003 года: support.microsoft.com/kb/324470 - person NotMe; 27.04.2011
comment
@ chris .. я создаю веб-приложение, в котором я хочу реализовать безопасность на основе ролей ... поскольку система ролей asp.net не завершена, я хочу развернуть свою собственную систему RBAC - person taher chhabrawala; 27.04.2011

Проверьте безопасность носорога, если вам нужно что-то более тонкое.

person maciek    schedule 26.04.2011

Как было предложено в предыдущем сообщении, для достижения большей детализации вам необходимо будет опираться на существующих поставщиков членства и ролей ASP.net. Существуют сторонние элементы управления, такие как http://www.visualaccesscontrol.com, которые обеспечивают Безопасность доступа к модулям на основе ролей и безопасность доступа к данным. С помощью Visual Access Controls вы можете добавить административные функции к своему веб-приложению ASP.net, чтобы динамически ограничивать пользователей действиями, которые им разрешено выполнять, и подмножеством данных, которые им разрешено видеть, в зависимости от их соответствующих ролей.

person Marc    schedule 20.02.2014

Вы реализуете операцию удаления, поэтому вам нужно проверить, есть ли у вошедшего в систему пользователя разрешение на удаление объекта. Например, вы можете создать роль CanDeleteOs. Тогда ваш код будет выглядеть так:

if ( !Roles.IsUserInRole("CanDeleteOs") )
    throw new Exception("User does not have permission to delete O's.");
person Katie Kilian    schedule 26.04.2011
comment
Роль не является разрешением / операцией и не должна использоваться как таковая. - person O.O; 05.12.2011
comment
Тогда что это? Как следует использовать роль, если не как разрешение? А что использовать вместо разрешения? - person Katie Kilian; 05.12.2011
comment
В этом контексте роль похожа на группу (если вы думаете о пользователях и группах). Разрешение - это дополнительный уровень детализации, который не входит в систему безопасности .NET (аутентификация и авторизация). Настоящая структура RBAC делает четкое различие между пользователями, ролями и операциями / разрешениями. Вы можете использовать что-то вроде AzMan, visual-guard, диспетчера разрешений asp.net или самостоятельно. - person O.O; 05.12.2011
comment
Понятно. Не уверен, что это стоило голоса против, но, тем не менее, я ценю разъяснения. Спасибо за продолжение. - person Katie Kilian; 05.12.2011
comment
Я бы снял голос "против" сейчас, когда в этих комментариях есть контекст, но он меня не позволяет. Основная причина, по которой я проголосовал против, заключалась в том, что ваш ответ пропагандировал плохую практику и мог ввести в заблуждение непосвященных. Без проблем. - person O.O; 06.12.2011