3

Есть ли наилучшая практика использования претензий для правого управления?Веб-API и .NET 4.5: Претензии и права

Я использую новые .net 4.5 и новые классы требований. В настоящее время я делаю что-то вроде этого:

new ClaimsIdentity(new List<Claim> 
        { 
         new Claim("Username", user.UserName), 
         new Claim("UserNumber", user.UserNumber.ToString()), 
         new Claim("Creation_Right", ""), 
         new Claim("Edit_Right", "") 
        } 

добавляет правильные иски без значения. Позже я проверяю наличие справа. Нет необходимости в значении (например, true/false) - если он присутствует, его неявный «true».

Есть ли лучший способ сделать это?

ответ

1

Возможно. Похоже, то, что вы делаете, - это объединение аутентификации и авторизации вместе, принятие решения о политике доступа в момент аутентификации.

У вас также есть возможность отделить свой компонент авторизации от вашего компонента аутентификации. Претензии представляют собой набор информации о пользователе, который может использоваться для принятия решения об авторизации. То есть ваш шаг autheNtication создает набор требований, и всякий раз, когда ваш пользователь пытается что-то получить, эти претензии подаются на компонент authoriZation, который принимает решение.

Это обеспечивает некоторую гибкость в том, что ваша политика авторизации может изменяться и развиваться независимо от системы выдачи ваших требований. Например, вы можете опубликовать заявку на роль, которая идентифицирует кого-то как администратора, и вы также можете указать запрос метода проверки подлинности, который указывает, как пользователь вошел в систему, используя, например, смарт-карту или имя пользователя и пароль. Это дает вам право определять политику доступа, для доступа к некоторым ресурсам может потребоваться только роль администратора, а для других более чувствительных ресурсов требуется роль администратора и использование сильного механизма аутентификации. Это также означает, что вы можете переключаться между несколькими политиками доступа в зависимости от контекста. Ваш интернет-магазин виски может использовать заявку ageOver21 в США, но канадская версия вашего сайта требует более 18 или более 19 претензий. Разделение вашего authZ от вашего authN позволяет использовать эту гибкость.

+0

Привет, может быть, я должен упомянуть, что я использую ASP.NET Web API. Аутентификация и авторизация разделены в рамках. Я добавляю атрибут аутентификации к методам контроллера, и их можно вызвать только в том случае, если пользователь был аутентифицирован. В методах я проверяю претензии и что пользователю разрешено делать. Простой «находится в группе администратора» для меня не работает. В моей системе много прав. Я мог бы добавить группу для каждого права: (группа «разрешено создание», «разрешено удаление», ....), но это не очень хорошая идея, я думаю. – user437899