Я хотел бы реализовать авторизацию на основе утверждений в проекте Web Api. Я понимаю идею претензий и могу вручную добавить заявку к пользователю и разрешить запрос на основе этого. Однако я не знаю, как мне управлять претензиями, назначать их пользователям и обновлять их в будущем.Идентификация ASP.NET - Как управлять претензиями?
Например, у меня есть объект Product и ProductCreate, ProductRead, ProductUpdate и ProductDelete для операций CRUD для этого объекта. Поэтому у меня есть несколько вопросов:
- Я могу хранить претензии в БД, но что является лучшим способом добавить претензии по умолчанию для пользователя при регистрации?
- Если я добавлю новые функции, чтобы перечислить продукты, которые разрешены только в том случае, если у пользователя есть претензия ProductList - новые пользователи получат это требование, но как я могу добавить эту претензию ко всем существующим пользователям в системе?
- Должно ли существовать ограничение на количество претензий, связанных с пользователем? В более крупной системе со многими объектами пользователь может в итоге получить сотни претензий
Как я уже сказал, я знаю, как физически добавлять претензии к пользователю и т. Д., Но это более значительная картина процесса о том, как вы будете управлять претензиями и пользователями в реальном мире.
Спасибо!
ОБНОВЛЕНИЕ Спасибо, Брендан, я ценю вашу помощь! Я не знаю, не понимаю ли я что-то фундаментальное, или если ответ смотрит мне в лицо - в любом случае, я не понимаю.
Итак, у меня есть веб-api и я хотел бы предоставить гранулированный доступ к различным методам управления. Как администратор, я хочу получить разрешение на все вызовы, чтобы у меня были все претензии. Зарегистрированные пользователи должны иметь доступ к чтению некоторых методов, и вы, как модератор, должны иметь обновление и создавать доступ к некоторым. Я понимаю, что эти претензии должны храниться в БД (сервер SQL в моем случае) где-то и «назначаться» пользователю при регистрации. Используя Identity Asp.Net, заявки каждого пользователя будут храниться в таблице AspNetUserClaims, поэтому, когда они заходят, они получают все свои претензии в токене по умолчанию. Simples!
Что мне не хватает, так это то, как вы будете обрабатывать претензии, которые должны быть назначены пользователю, когда они регистрируются, какие претензии должны получать модераторы и т. Д. И как вы добавите/удалите привилегии. Мне не кажется правильным, чтобы это было в коде, поскольку добавление нового требования в систему потребует перестроения и нового развертывания.
Кроме того, если я добавлю новые функциональные возможности, требующие новых претензий к различным типам пользователей, как бы я удостоверился, что в следующий раз, когда существующий пользователь регистрируется, они получают новые претензии, а также те, которые они были назначены, когда сначала зарегистрирован.
Надеюсь, у меня есть смысл, я могу смешивать некоторые из основанных на ролях мышления с некоторыми размышлениями, основанными на претензиих, которые могут быть источником моего замешательства. Я просто не видел примеров того, как вы будете управлять приложением со многими, многими претензиями в реальном мире.
Еще раз спасибо!
Вы добавляете претензии через классы Manager, которые поставляются с идентификатором ASP.NET ('AddClaimAsync'). Это фактически добавит их в таблицу «AspNetUserClaims», так что, когда пользователь войдет в систему, эти претензии автоматически добавляются к ClaimsIdentity пользователя. –
Спасибо, Брендан. Я знаю, как добавлять претензии к пользователю, но это добавит все претензии ко всем пользователям. Как я должен управлять добавлением конкретных требований к пользователям, например. скажем, я хочу, чтобы новые подписчики имели доступ только к продукту ProductRead и ProductUpdate - кажется, что это неправильно в коде регистрации? Как СЛЕДУЕТ это сделать? –
Это полностью зависит от архитектуры/структуры вашего приложения. Можете ли вы расширить это, чтобы уменьшить вероятность того, что это станет вопросом, основанным на мнениях? –