WIF: пользовательские претензии - PullRequest
4 голосов
/ 03 февраля 2012

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

  • ClaimType
  • ClaimValue
  • ValueType
  • правый

Учитывая сценарий, в котором вы хотите создать заявку, пометки означают, что пользователь имеет право редактировать объект User, как правильно установить эти атрибуты?

Кроме того, в WIF, похоже, нет свойства для атрибута "Right". «Право» используется только в контексте WCF?

Я в замешательстве, помогите!

EDIT:

Спасибо за ваши ответы. Чтобы сделать это немного более конкретным, в настоящее время я вижу два варианта для моей пользовательской заявки:

1-ClaimType = Edit, ClaimValue = Пользователь

2-ClaimType = Действие, ClaimValue = EditUser

Первый вариант выглядит более «основанным на утверждениях», а вариант кажется более «основанным на ролях». Мысли?

Ответы [ 2 ]

4 голосов
/ 04 февраля 2012

В .Net есть два разных типа Claim. Один в WIF (Microsoft.IdentityModel.Claims) и один в System.IdentityModel.Claims, который использовался в WCF pre-WIF (хотя на самом деле он не является частью WCT). Только у System.IdentityModel.Claims.Claim есть свойство Right, как вы упомянули.

Я использовал подход на основе утверждений с WCF и ASP.Net с WIF и без него, и модель программирования WIF определенно проще из этих двух.

Для сценария редактирования пользователя, который вы описываете, я бы определил роль с подходящим именем. UserEditor может быть в порядке, но это звучит очень специфично. Вам следует просмотреть коллекцию всех разрешений, которые вы хотите предоставить этим пользователям, и найти подходящее обобщающее имя (может быть, UserAdministrator?).

Для этих пользователей вы должны добавить заявку на роль (например, типа http://schemas.microsoft.com/ws/2008/06/identity/claims/role или Microsoft.IdentityModel.Claims.ClaimTypes.Role). Если ваш поставщик удостоверений является внешним по отношению к вашему приложению, и вы не можете управлять заявками, которые он создает, вам потребуется реализовать пользовательский ClaimsAuthenticationManager для преобразования выданного набора утверждений путем добавления нового утверждения роли.

Затем вы можете украсить операции, к которым вы хотите предоставить доступ, PrincipalPermissionAttribute примерно так:

[PrincipalPermission (SecurityAction.Demand, Role = "UserAdministrator")]

Эта структура довольно гибкая и может использоваться различными способами в ASP.Net, WCF или просто в обычной разработке .Net. Ваш вопрос не дает много контекста, чтобы дать очень конкретный ответ с примерами.

2 голосов
/ 03 февраля 2012

Я не уверен, где вы читаете, что утверждения должны иметь правильное свойство, я думаю, что это неправильное использование концепции.

Набор утверждений сам по себе не передает права пользователя.Скорее:

набор заявок + политика = права пользователя.

Как правило, приложения на основе утверждений применяют политику к набору входящих утверждений пользователя для принятия решений об авторизации.Доступ на основе ролей является наиболее распространенным, поэтому эти решения могут быть такими же простыми, как User.IsInRole («Менеджер»), который просто проверяет наличие у пользователя утверждения ClaimType = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role" и ClaimValue =" Manager ".

Интернет-магазин спиртных напитков может потребовать, чтобы пользователи были старше 21 года, и в этом случае вы проверяете возрастное требование. Однако у вас будет другая политика для канадской версии этого веб-сайта, где возрастное ограничение можетбыть 18. Если бы такие «права» были сообщены через сами претензии, такая гибкость политики была бы невозможна.

...