Разрешения ASP.NET Core

Я теряюсь во всех возможных вариантах управления тем, что может делать пользователь, а что нет. Я начал с ролей: [Authorize(Roles = Constants.Roles.ModeratorAndUp)]. Где ModeratorAndUp - строка "Moderators, Administrators".
Но мне нужен более гибкий подход. Последние 3 часа я читаю о Претензиях и разрешениях. Я также нашел это интересное сообщение в блоге .

Я использую Angular и ASP.NET Core вместе с шаблоном Universal. Для аутентификации я использую OpenIddict. Я читал книгу.

Я хочу использовать токен JWT для авторизации и аутентификации. Я не знаю, как следует обрабатывать разрешения в .NET Core, но у меня есть 100 разных ролей, и это полный беспорядок. А также, когда я создаю нового пользователя, мне нужно вручную добавить около 20 ролей. Было бы неплохо, если бы я мог создавать группы с ролями / разрешениями, а затем добавлять пользователя в эту группу. Но не знаю, как этот дизайн будет работать с авторизацией токенов OpenIdDict и JWT.

Может ли кто-нибудь указать мне правильное направление, и тогда я буду исследовать самостоятельно.
Я не уверен, стоит ли мне создавать систему, которая будет автоматически обновлять роли пользователей при изменении разрешений / ролей группы, если я буду использовать претензии. .. Я хотел бы использовать атрибут [Authorize], потому что он действительно упрощает работу.

Что / как / что лучше всего использовать для аутентификации / авторизации JWT Token в ASP.NET Core.


person Makla    schedule 05.06.2017    source источник
comment
Подумайте о ролях как о группе требований, и тогда вы узнаете, как ее решить.   -  person Tseng    schedule 05.06.2017
comment
But don't know how this design will play with OpenIdDict and JWT token authorisation.: использование утверждений с OpenIddict абсолютно не отличается от использования утверждений с промежуточным программным обеспечением файлов cookie (внутри стек авторизации не зависит от того, как вы аутентифицируете своих пользователей, поэтому одни и те же концепции применимы как к файлам cookie, так и к токенам). Я бы также пошел с привилегиями / разрешениями, как предлагает @ssmith. Если вы думаете, что добавляете слишком много утверждений в свои токены, не пропустите stackoverflow.com/questions/42496306/.   -  person Kévin Chalet    schedule 09.06.2017


Ответы (1)


Думайте о претензиях как о чем-то более гибком, чем роли. Тем не менее, если у вас есть сложные бизнес-правила, которые не обязательно сопоставляются просто с группами, к которым принадлежит пользователь, вы можете инкапсулировать свои разрешения в привилегии (классы, в обязанности которых входит определение того, имеет ли данный пользователь определенные привилегии над данным ресурсом. Подробнее см. Здесь: http://ardalis.com/favor-privileges-over-role-checks

По моему опыту, это снижает много условной сложности на уровне пользовательского интерфейса.

person ssmith    schedule 06.06.2017