2015-06-21 2 views
48

Я совершенно новичок в использовании claims в ASP.NETIdentity и хочу получить представление об оптимальных методах использования Roles and/or Claims.Лучшие практики для ролей против претензий в ASP.NET Identity

После всего этого чтения, я до сих пор есть такие вопросы, как ...

Q: У нас больше не использовать роли?
В: Если да, почему все еще предлагаются роли?
В: Должны ли мы использовать только претензии?
Вопрос: Должны ли мы использовать Роли & Претензий вместе?

Моя первоначальная мысль заключается в том, что мы «должны» использовать их вместе. Я вижу Claims в качестве подкатегорий для Roles, которые они поддерживают.

НАПРИМЕР:
Роль: Учет
Требований: CanUpdateLedger, CanOnlyReadLedger, CanDeleteFromLedger

Q: Они предназначены для быть взаимоисключающими?
Вопрос: Или лучше обратиться к претензиям ТОЛЬКО и «полностью квалифицировать» требования?
Вопрос: Каковы лучшие практики здесь?

Пример: Использование Роли & претензий Вместе
Конечно, вы должны написать свою собственную логику атрибутов для этого ...

[Authorize(Roles="Accounting")] 
[ClaimAuthorize(Permission="CanUpdateLedger")] 
public ActionResult CreateAsset(Asset entity) 
{ 
    // Do stuff here 

    return View(); 
} 

Пример: Полностью Отборочные Ваши требования

[ClaimAuthorize(Permission="Accounting.Ledger.CanUpdate")] 
public ActionResult CreateAsset(Asset entity) 
{ 
    // Do stuff here 

    return View(); 
} 
+1

Итак, я столкнулся с той же проблемой, как вы ее решаете и как вы можете разрешить разрешение в приложении? – Loai

ответ

47

Роль - это символическая категория, которая собирает ts вместе пользователи, которые имеют одинаковые уровни привилегий безопасности. Для авторизации на основе ролей требуется сначала идентифицировать пользователя, затем определить роли, которым назначен пользователь, и, наконец, сравнить эти роли с ролями, которым разрешен доступ к ресурсу.

Напротив, претензия является правом пользователя идентифицировать себя. Другими словами, «мне разрешено делать это, потому что у меня есть это требование». В целом авторизация на основе утверждений включает авторизацию на основе ролей. Точнее, членство в ролях определяется на основе идентичности, а идентификация - это всего лишь один вид права на стоимость требования. Роли по существу являются очень конкретным видом претензии, то есть «поскольку мое имя пользователя - это, я являюсь участником этой роли. Поскольку я являюсь участником этой роли, у меня есть доступ к этому ресурсу».

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

13

Как прекрасно объяснил @Claies, претензии могут быть более описательной и глубокой ролью. Я думаю о них как о ваших ролях. У меня есть идентификатор в спортзале, поэтому я принадлежу к роли членов. Я также участвую в уроках кикбоксинга, поэтому у меня есть претензия к ним, идентификатор кикбоксинга. Моему заявлению потребуется объявление новой роли в соответствии с моими правами на членство. Вместо этого у меня есть идентификаторы для каждой специальной вещи, которую я могу сделать в спортзале, а не много новых типов членства. Вот почему претензии подходят мне лучше.

Существует большое объяснение видео Барри Дорранса, в котором говорится о преимуществе использования претензий по ролям. Он также заявил, что роли, все еще находятся в .NET для обратной совместимости. Видео очень информативно о том, как работают утверждения, роли, политики, авторизация и аутентификация.

Вы можете найти здесь: ASP.NET Core Authorization with Barr Dorrans

PS. Извините за мою английскую грамматику.

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