![](/img/trans.png)
[英]MVC4 Forms Authentication Active Directory Custom Authorize Attribute
[英]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.