Добавить авторизацию к определенному маршруту без добавления атрибута в MVC - PullRequest
0 голосов
/ 15 октября 2018

Мне нужно добавить авторизацию к определенному маршруту без добавления атрибута Авторизации.Есть ли способ сделать это при запуске?Я знаю, что могу добавить атрибут Authorize глобально ко всем маршрутам, но мне нужно добавить авторизацию только для определенного метода в контроллере, не касаясь какого-либо кода в этом контроллере.

1 Ответ

0 голосов
/ 15 октября 2018

Если вы не можете коснуться кода, я вижу единственное решение - проверьте с помощью промежуточного программного обеспечения.Давайте представим, что маршрут, доступ к которому вы хотите ограничить, - это POST «/ users / register», поэтому вы можете использовать ActionFilter, зарегистрированный глобально, при запуске, в котором вы проверяете url, а если его URL-адрес «/ users / register», вы пытаетесь проверить токен иесли токен недействителен - верните 401.

Также вы можете использовать связующее ПО Owin

Вот простой пример реализации такой логики с использованием ActionFilter

public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalConfiguration.Configuration.Filters.Add(new CheckAuthorizationFilterAttribute());
            GlobalConfiguration.Configure(WebApiConfig.Register);
        }
    }
    public class CheckAuthorizationFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            var requestUri = actionContext.Request.RequestUri.AbsolutePath;
            if (requestUri == "/api/users/register")
            {
                var isTokenValid = ValidateToken();
                if (!isTokenValid)
                    actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
                return;
            }
        }

        public bool ValidateToken() => false;

        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {

        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...