Я создал систему входа в систему, которая предоставляет пользователю 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 и фактически не перенаправляет.
Как мне добиться требуемой функциональности, чтобы пользователь, запрашивающийданные авторизованы?