Пользовательская авторизация для каждого вызова действия в Web API

#asp.net-web-api #authorization

#asp.net-web-api #авторизация

Вопрос:

Мне нужно предоставить пользователям разрешения для вызова точных действий. А также каждое правило разрешения может содержать правила проверки для аргументов действия:

 [CustomAuth]
public MyController : ApiController
{
    [ValidateAccess, ActionName("Myaction")]    
    public void MyAction([MyTypeAccess] MyType myType)
    {
    }
}
  

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

Ответ №1:

Не нашел прямого решения в Web API для этой проблемы.

Поскольку я использую перехватчики Castle, я добавил новый перехватчик на все контроллеры, которые поддерживают аутентификацию. Перехватчик предоставляет доступ к вызову, и вы можете получить любой атрибут и значение, переданные контроллеру / действию.

Атрибут проверки действия говорит, что вам нужно применить процедуры проверки к этому вызову, ActionName определяет тип вызова (при необходимости, в будущем это будет перенесено в собственный атрибут, поскольку имя действия может отличаться в устаревших контроллерах для старых версий).

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