2013-04-08 53 views
3

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

如果有人能向我解释或与我分享任何解释这一点的链接,这将是非常有益的。即使我在MSDN上无法找到任何资源。

+1

你不会找到任何文件,因为提到'IAuthenticationFilter'接口加入到ASP.NET MVC两个星期前(3月22日):http://aspnetwebstack.codeplex.com/SourceControl/ changeset/178ec82f90f056f958994903fe0998d3e127a0cb – nemesv 2013-04-08 11:16:12

+0

@nemesv - 哦,是的,谢谢你的回复,我的错误。 – Bibhu 2013-04-08 11:24:31

回答

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

} 
6

使用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

如果只有IAuthenticationFilter的MSDN文档包含前两个句子! – 2014-03-06 13:37:04