.NET WebAPI централизованная авторизация

В .NET WebAPI я создал способ, чтобы все правила авторизации располагались в одном месте, а не разбросаны по контроллерам. Мне любопытно, почему эта централизация не проводится чаще; есть ли последствия / проблемы безопасности?

Мой текущий подход заключается в создании словаря во время App_Start, который содержит все мои данные авторизации, а затем с использованием DelegatingHandler для применения ограничений (код ниже). Ключ словаря - это кортеж контроллера и действия, а значение - авторизованные роли. DelegatingHandler связывается с конфигурацией маршрутизации WebAPI, чтобы узнать, какой контроллер вызывается, а затем использует словарь, чтобы определить, разрешен ли запрос.

Словарь:

var authorizations = new Dictionary<Tuple<string, string>, string>();
authorizations.Add(new Tuple<string, string>("values", "get"), "public");
authorizations.Add(new Tuple<string, string>("values", "put"), "private");

DelegatingHandler:

public class SecurityDelegateHandler : DelegatingHandler
{
    private readonly Dictionary<Tuple<string, string>, string> _authorizations;

    public SecurityDelegateHandler(Dictionary<Tuple<string, string>, string> auth)
    {
        _authorizations = auth;
    }

    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        var config = GlobalConfiguration.Configuration;
        var controllerSelector = new DefaultHttpControllerSelector(config);
        var descriptor = controllerSelector.SelectController(request);

        string restrictions;

        if (!_authorizations.TryGetValue(
                new Tuple<string, string>(descriptor.ControllerName.ToLower(),
                request.Method.ToString().ToLower()), out restrictions))
        {
            return Task<HttpResponseMessage>.Factory.StartNew(() =>
                        request.CreateResponse(HttpStatusCode.Forbidden, 
                        "Access denied on unconfigured actions"), 
                        cancellationToken);
        }

        if (!(Roles.Provider).GetRolesForUser(
               HttpContext.Current.User.Identity.Name).Any(r => 
               restrictions.Contains(r)))
        {
            return Task<HttpResponseMessage>.Factory.StartNew(() => 
                        request.CreateResponse(HttpStatusCode.Forbidden, 
                        "Access Denied"), cancellationToken);
        }

        return base.SendAsync(request, cancellationToken);
    }
}

Итак, мои вопросы:

Есть ли проблемы с реализацией Role Based Authorization таким образом?Есть ли какие-нибудь хорошие пакеты, которые обрабатывают централизацию авторизации для WebAPI? Я посмотрел в FluentSecurity,но это не поддерживает WebAPI.

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос