在asp.net MVC中实现IAuthenticationFilter接口

3

我正在学习ASP.NET MVC中的Controller类,发现它实现了IAuthenticationFilter接口。但是我不知道如何在我的控制器中实现它的OnAuthentication()和OnAuthenticationChallenge()方法以及何时调用这些方法。

如果有人能够向我解释或分享任何解释此内容的链接,那将非常有帮助。即使在MSDN上,我也未能找到任何资源。


1
你找不到任何文档,因为所提到的 IAuthenticationFilter 接口是两周前(3月22日)添加到 ASP.NET MVC 中的:http://aspnetwebstack.codeplex.com/SourceControl/changeset/178ec82f90f056f958994903fe0998d3e127a0cb - nemesv
2个回答

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);
     }
}

2
如果MSDN文档中包含了你的前两句话,那该多好啊! - David Bullock

2
您可以使用AuthenticationContext暂时更改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");

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接