.NET MVC Проверьте заголовок, прежде чем разрешить ответ - PullRequest
0 голосов
/ 20 сентября 2018

Я создал систему входа в систему, которая предоставляет пользователю API-ключ при успешном входе в систему.К ключу API прикреплен уровень доступа.

Я отправляю ключ API в заголовке с каждым запросом Ajax из моего внешнего интерфейса, однако он больше не отправляет правильный ответ.

Это один из моих контроллеров:

[AllowCrossSiteJson]
    public class WebOrdersController : Controller
    {
        protected IWebOrdersService _webOrdersService = new WebOrdersService();
        // GET: WebOrders
        public ActionResult Index()
        {
            return View();
        }
        [WebOrdersAPIFilter]
        public String GetTotals()
        {
             return _webOrdersService.GetAllTotals();
        }
    }

А это мой класс Filter:

public class WebOrdersAPIFilter : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            IAccountsService _accountsService = new AccountsService();
            filterContext.RequestContext.HttpContext.Response.AddHeader("Authority", "*");

            var rawUrl = HttpContext.Current.Request.RawUrl;
            var routeArray = rawUrl.Split('/');

            var route = routeArray[0].ToLower();

            if (String.IsNullOrEmpty(route))
            {
                route = routeArray[1].ToLower();
            }

            var headers = filterContext.HttpContext.Request.Headers;

            // Ensure that all of your properties are present in the current Request
            if (!String.IsNullOrEmpty(headers["Authority"]))
            {
                var apiKey = headers["Authority"];
                //GET API LEVEL
                int accessLevel = _accountsService.CheckAPIKey(apiKey);

                if(route == "weborders" && (accessLevel != 1 || accessLevel != 3 || accessLevel != 6))
                {
                    filterContext.Result = new RedirectResult("http://localhost/error/unauthorised");
                }

            }
            else
            {
                filterContext.Result = new RedirectResult("http://localhost/error/notloggedin");
            }

            base.OnActionExecuting(filterContext);
        }
    }

Если пользователь не вошел в систему, ключ API не будет отправлен в заголовок, поэтому, если он не существует, можно с уверенностью сказать, что они вышли из системы.Если они вошли в систему, ключ отправлен.Затем я получаю уровень доступа ключа и сравниваю его с маршрутом.

Я отладил его и обнаружил, что переменные route и accessLevel работают правильно, однако даже тогда он не возвращает и не отвечает, и еслиОператор IF () завершается неудачно, он возвращает html для страницы / error / unauthorized или / error / notloggedin и фактически не перенаправляет.

Как мне добиться требуемой функциональности, чтобы пользователь, запрашивающийданные авторизованы?

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