Пользовательский фильтр авторизации против политики в ASP.Net Core 2.1 - PullRequest
0 голосов
/ 30 августа 2018

Я проектирую новый ASP.Net CORE 2.1 WebAPI и пытаюсь найти наилучший способ реализации системы авторизации, которая будет соответствовать нашим потребностям. Наши роли и разрешения управляются базой данных и могут сочетать и сопоставлять разрешения на основе ролей и отдельных ресурсов. Таким образом, для данной конечной точки доступ по умолчанию может быть основан на роли (скажем, только для администратора), но администратор может также назначить отдельным пользователям доступ к этой конечной точке (или наоборот; и отозвать доступ к определенному ресурсу, иным образом предоставленному ролью). В результате для каждой авторизации конечной точки требуется запрос к базе данных, чтобы определить действительный доступ к этому ресурсу. Мне кажется, что здесь необходим настраиваемый фильтр авторизации, но многие документы MS и другие ресурсы подталкивают аутентификацию на основе политик и рекомендуют не «накатывать свои». Я не понимаю, как будет работать решение на основе политики, поскольку оно основано на статических утверждениях политики. Можно ли удовлетворить наши потребности с помощью политик или использовать собственный фильтр авторизации?

1 Ответ

0 голосов
/ 30 августа 2018

Политика аутентификации - это путь. Да, это может быть основано на несколько «статической» политике, то есть несколько действий / контроллеров могут в конечном итоге использовать что-то вроде [Authorize(Policy = "MyPolicy")], но сами политики не являются статичными. Вы можете определить любое количество условий в обработчике политики. Вы также можете смешивать и сочетать. Итак, если, скажем, что-то доступно только для роли «Foo», но вам также необходимы разрешения на уровне объекта, определенные политикой «Bar», вы, безусловно, можете сделать что-то вроде [Authorize(Roles = "Foo", Policy = "Bar")].

...