繁体   English   中英

自定义授权属性和表单身份验证

[英]Custom Authorize Attribute & Forms authentication

我有一个自定义的Authorize Attribute,到目前为止,它看起来像这样:(稍后我将添加更多逻辑。我只想先看一下这项工作)。

public class CustomAuthorizeAttribute : AuthorizeAttribute
{

    public override void OnAuthorization(AuthorizationContext filterContext)
    {

        base.OnAuthorization(filterContext);
    }

}

然后,将我的属性放到控制器上:

[CustomAuthorize(Order = 0)]
public class MyController : Controller

现在,

在我的表单身份验证用尽之前,这一切都很好且很好。

IE浏览器

<forms loginUrl="~/myController/myMethod" timeout="30" /> // this timout expires.

在此超时之后,我的自定义授权属性不再受到攻击,相反,表单auth模块似乎接管了。

超时后,表单身份验证模块仅返回由上面的webconfig代码中指定的操作呈现的视图。

我想在超时到期时拦截onAuthorize操作,因此我可以询问HttpContext的某些情况,并有条件地重定向用户。

有人做过类似的事情吗?

实际上是默认行为


如果您要处理未经身份验证的情况,请覆盖:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
      //your logic
      //...
      //...

      base.HandleUnauthorizedRequest(filterContext);
}

或者,您可以继承ActionFilterAttribute并检查用户是否在自定义操作过滤器中通过了身份验证。 这将使您绕过您遇到的表单身份验证问题。

像这样的东西:

public class CustomAuthorizeAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
            {
                if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
                {
                    //code that handles unauthorized ajax request
                }
                else
                {
                    //code that handles http request
                }
            }

            //you custom authorization logic

        }
    }

您可以将代码插入HttpApplication.AcquireRequestState中,以查看身份验证是否再有效,然后在该位置进行重定向。 请查看MSDN ,以获取有关该事件的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM