1

Я хотел бы реализовать авторизацию на основе утверждений в проекте Web Api. Я понимаю идею претензий и могу вручную добавить заявку к пользователю и разрешить запрос на основе этого. Однако я не знаю, как мне управлять претензиями, назначать их пользователям и обновлять их в будущем.Идентификация ASP.NET - Как управлять претензиями?

Например, у меня есть объект Product и ProductCreate, ProductRead, ProductUpdate и ProductDelete для операций CRUD для этого объекта. Поэтому у меня есть несколько вопросов:

  1. Я могу хранить претензии в БД, но что является лучшим способом добавить претензии по умолчанию для пользователя при регистрации?
  2. Если я добавлю новые функции, чтобы перечислить продукты, которые разрешены только в том случае, если у пользователя есть претензия ProductList - новые пользователи получат это требование, но как я могу добавить эту претензию ко всем существующим пользователям в системе?
  3. Должно ли существовать ограничение на количество претензий, связанных с пользователем? В более крупной системе со многими объектами пользователь может в итоге получить сотни претензий

Как я уже сказал, я знаю, как физически добавлять претензии к пользователю и т. Д., Но это более значительная картина процесса о том, как вы будете управлять претензиями и пользователями в реальном мире.

Спасибо!

ОБНОВЛЕНИЕ Спасибо, Брендан, я ценю вашу помощь! Я не знаю, не понимаю ли я что-то фундаментальное, или если ответ смотрит мне в лицо - в любом случае, я не понимаю.

Итак, у меня есть веб-api и я хотел бы предоставить гранулированный доступ к различным методам управления. Как администратор, я хочу получить разрешение на все вызовы, чтобы у меня были все претензии. Зарегистрированные пользователи должны иметь доступ к чтению некоторых методов, и вы, как модератор, должны иметь обновление и создавать доступ к некоторым. Я понимаю, что эти претензии должны храниться в БД (сервер SQL в моем случае) где-то и «назначаться» пользователю при регистрации. Используя Identity Asp.Net, заявки каждого пользователя будут храниться в таблице AspNetUserClaims, поэтому, когда они заходят, они получают все свои претензии в токене по умолчанию. Simples!

Что мне не хватает, так это то, как вы будете обрабатывать претензии, которые должны быть назначены пользователю, когда они регистрируются, какие претензии должны получать модераторы и т. Д. И как вы добавите/удалите привилегии. Мне не кажется правильным, чтобы это было в коде, поскольку добавление нового требования в систему потребует перестроения и нового развертывания.

Кроме того, если я добавлю новые функциональные возможности, требующие новых претензий к различным типам пользователей, как бы я удостоверился, что в следующий раз, когда существующий пользователь регистрируется, они получают новые претензии, а также те, которые они были назначены, когда сначала зарегистрирован.

Надеюсь, у меня есть смысл, я могу смешивать некоторые из основанных на ролях мышления с некоторыми размышлениями, основанными на претензиих, которые могут быть источником моего замешательства. Я просто не видел примеров того, как вы будете управлять приложением со многими, многими претензиями в реальном мире.

Еще раз спасибо!

+0

Вы добавляете претензии через классы Manager, которые поставляются с идентификатором ASP.NET ('AddClaimAsync'). Это фактически добавит их в таблицу «AspNetUserClaims», так что, когда пользователь войдет в систему, эти претензии автоматически добавляются к ClaimsIdentity пользователя. –

+0

Спасибо, Брендан. Я знаю, как добавлять претензии к пользователю, но это добавит все претензии ко всем пользователям. Как я должен управлять добавлением конкретных требований к пользователям, например. скажем, я хочу, чтобы новые подписчики имели доступ только к продукту ProductRead и ProductUpdate - кажется, что это неправильно в коде регистрации? Как СЛЕДУЕТ это сделать? –

+0

Это полностью зависит от архитектуры/структуры вашего приложения. Можете ли вы расширить это, чтобы уменьшить вероятность того, что это станет вопросом, основанным на мнениях? –

ответ

0

Это точно такой же вопрос и проблема, с которой я сталкиваюсь. Все, что я нашел, это информация о том, как создать заявку, используя классы менеджера, но ничто не может справиться с этими утверждениями.

Возможно, существует различная комбинация доступа к пользователю, и если мой пользовательский интерфейс является отключенным пользовательским интерфейсом от моего API, я не думаю, что хотел бы, чтобы ui управлял этими претензиями для меня.

За исключением того, что вы можете создать класс претендента, столкнувшись с таблицей претензий, можно ли построить что-нибудь, что можно использовать?

Смежные вопросы