2014-02-24 2 views
0

Я пытаюсь реализовать защиту на основе утверждений в приложении ASP.NET MVC. Я планирую использовать класс ClaimsPrincipalPermission для проверки доступа на основе пар ресурсов/операций.Каков правильный способ реализации пользовательских требований в WIF?

Например

[ClaimsPrincipalPermission(SecurityAction.Demand, Operation="Read", Resource="Invoices")] 
[ClaimsPrincipalPermission(SecurityAction.Demand, Operation="Create", Resource="Fees")] 

Так что теперь мне нужно пользовательские Утверждает проверить свои пары операций/ресурсов. У меня разные ресурсы, все из которых имеют CRUD-операцию.

Вот что я имел в виду для настраиваемого требования:

((ClaimsIdentity)incomingPrincipal.Identity).AddClaim(new Claim("http://mysoftware.com/identity/claims/invoices", "Read")); 

или

 ((ClaimsIdentity)incomingPrincipal.Identity).AddClaim(new Claim("http://mysoftware.com/identity/claims/fees", "Create")); 
     ((ClaimsIdentity)incomingPrincipal.Identity).AddClaim(new Claim("http://mysoftware.com/identity/claims/fees", "Read")); 

Так в основном, один тип претензии на ресурс, а значения претензии могут быть комбинацией Read/Создание/обновление/удаление. Это правильный способ реализовать пользовательские претензии для системы, которая использует права CRUD? Должен ли я делать это по-другому?

Спасибо!

ответ

0

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

Кроме того, если вы делаете это в веб-приложении, встроенное свойство ClaimsPrincipalPermission воняет, потому что оно генерирует исключение, а то, что вы действительно хотите в веб-приложении, - это 401, поэтому вы можете рассмотреть атрибут ResourceActionAuthorizeAttribute имеют в Thinktecture IdentityModel вспомогательную библиотеку: https://github.com/thinktecture/Thinktecture.IdentityModel

+1

Кажется, что проект, на который делается ссылка, устарел. Какой подход вы рекомендуете для MVC5/.net 4.6.1? – user210757

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