| Четверг, 14 марта, 2013
Метки: ASP.NET Web API Комментарии: 0
Авторизация происходит позже, чем аутентификация, ближе к контроллеру. Это дает больше возможностей четкого разграничения полномочий для доступа к ресурсам.
У Web API есть встроенный фильтр авторизации – AuthorizeAttribute. Этот фильтр проверяет аутентифицирован ли пользователь. Если нет, то фильтр возвращает код ошибки HTTP 401 (Unauthorized), без вызова метода контроллера.
Этот фильтр можно применить глобально, к контроллеру или только к определенным методам действиям.
Глобально: Чтобы ограничить доступ ко всем контроллерам Web API в приложении, нужно добавить фильтр AuthorizeAttribute в глобальный список фильтров:
public static void Register(HttpConfiguration config) { config.Filters.Add(new AuthorizeAttribute()); }
Контроллер: Для ограничения доступа к конкретному контроллеру, нужно добавить для этого контролера фильтр в виде атрибута:
// Авторизация нужна для всех методов контроллера. [Authorize] public class ValuesController : ApiController { public HttpResponseMessage Get(int id) { ... } public HttpResponseMessage Post() { ... } }
Метод действия: Для управления доступом к определенным методам действия контроллера, добавляем атрибут фильтра к этим методам:
public class ValuesController : ApiController { public HttpResponseMessage Get() { ... } // Требуется авторизация для заданного метода. [Authorize] public HttpResponseMessage Post() { ... } }
В примерах выше, фильтр позволяет всем аутентифицированным пользователям выполнять подконтрольные методы действия и только анонимные пользователи получат ошибку авторизации. Но можно и ограничить доступ для определенных пользователей или ролей пользователей:
// Ограничение по имени пользователя: [Authorize(Users="Alice,Bob")] public class ValuesController : ApiController { } // Ограничение по роли пользователя: [Authorize(Roles="Administrators")] public class ValuesController : ApiController { }
Фильтр AuthorizeAttribute для контроллеров Web API находится в пространстве System.Web.Http. Он похож на такой же фильтр для контроллеров MVC, который находится в пространстве System.Web.Mvc, и не совместим с контроллерами Web API.
Для написания своих реализаций фильтра авторизации нужно наследовать класс от одного из следующих типов:
Следующая диаграмма показывает иерархию для фильтра AuthorizeAttribute.
В некоторых случаях можно разрешить выполнение метода действия, но изменять его поведение в зависимости от объекта principal. Например, возвращаемая информация зависит от роли пользователя. В методе действия можно получить текущий объект principal из свойства ApiController.User.
public HttpResponseMessage Get() { if (User.IsInRole("Administrators")) { // ... } }
Copyright © CodeHint.ru 2013-2025 (v2.4.7 - работает на Angular Universal)Калькулятор инвест-портфеля