asp.net MVC中的IAuthenticationFilter接口实现

时间:2013-04-08 10:39:33

标签: asp.net-mvc

我正在浏览ASP.NET MVC中的Controller类,并发现它实现了IAuthenticationFilter接口。但是我无法理解如何在我的控制器中实现其方法OnAuthentication()和OnAuthenticationChallenge(),以及何时调用它们。

如果有人可以向我解释或与我分享任何解释此问题的链接,将会非常有帮助。即使我无法在MSDN中找到任何资源。

2 个答案:

答案 0 :(得分:7)

使用OnAuthentication设置或修改当前请求的主体。

使用OnAuthenticationChallenge验证当前主体并允许执行当前请求。例如:

public class CustomAuthenticatioFilter : ActionFilterAttribute, IAuthenticationFilter
{
     public void OnAuthentication(AuthenticationContext filterContext)
     {
         //Here you are setting current principal
         filterContext.Principal = new ClaimsPrincipal();
     }

     public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
     {
         //Here you're checking current action and redirecting to ErrorPage
         filterContext.Result = new RedirectToRouteResult("ErrorPage",null);
     }
}

答案 1 :(得分:2)

您可以使用临时更改HttpContext.User Iprincipal后代对象具有自己的值。只需要通过AuthenticationContext传递新的IPrincipal。我认为,代表另一个用户(临时)行事会很有用。例如:何时替换某人度假或开发阶段。因此,您可以在VS2013预览MVC 5项目中使用。

例如在您的控制器中(作为IAuthenticationFilter):

protected override void OnAuthentication(System.Web.Mvc.Filters.AuthenticationContext filterContext) 
{

 //fill userPrincipal…

  filterContext.Principal = new RolePrincipal(userPrincipal); 

  //Or pass an ActionResult, if you want   

  filterContext.Result = new RedirectResult("http://www.stackoverflow.com");

}