ASP.Net и DotNetNuke - почему клиент AuthorizeAttribute переопределяет ValidateAntiForgeryToken? - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть собственный AuthorizationAttribute:

public class CodeWomplerAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return SessionManager.CheckSession(SessionKeys.User)==true;
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (SessionManager.CheckSession(SessionKeys.User) == false)
        {
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary 
                {
                    { "action", "ActionName" },
                    { "controller", "ControllerName" }
                });
        }
        else
            base.HandleUnauthorizedRequest(filterContext);
    }
}

А вот пример функции в контроллере:

    [HttpPost]
    [DotNetNuke.Web.Mvc.Framework.ActionFilters.ValidateAntiForgeryToken]
    [CodeWomplerAuthorize]
    public string InitializeNew()
    {
        var techSheet = new TechSheet {WorkOrder = {CreateDate = DateTime.Now}};
        var empList = new WorkOrderEmployeeController().Gets().Recordset;
        return JsonConvert.SerializeObject(Json(new{techSheet,empList}));
    }

Мой пользовательский атрибут работает отлично.Но если я включаю [DotNetNuke.Web.Mvc.Framework.ActionFilters.ValidateAntiForgeryToken], я получаю ошибку.

ValidateAntiForgeryToken завершается неудачей, если AuthorizeCore имеет переопределение.

Как включить ValidateAпереопределение AuthorizeCore?

1 Ответ

0 голосов
/ 11 декабря 2018

Вот один из способов:

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
    var cookie = httpContext.Request.Cookies[AntiForgeryConfig.CookieName];
    AntiForgery.Instance.Validate(cookie?.Value, httpContext.Request.Headers["__RequestVerificationToken"]);` protected override bool AuthorizeCore(HttpContextBase httpContext)
    return SessionManager.CheckSession(SessionKeys.User)==true;
}
...