我正在浏览 ASP.NET MVC 中的 Controller 类,发现它实现了 IAuthenticationFilter 接口。但是我无法理解如何在我的控制器中实现其方法 OnAuthentication() 和 OnAuthenticationChallenge() 以及何时调用它们。
如果有人可以向我解释或与我分享任何解释这一点的链接,那将非常有帮助。即使我在 MSDN 中也找不到任何相关资源。
我正在浏览 ASP.NET MVC 中的 Controller 类,发现它实现了 IAuthenticationFilter 接口。但是我无法理解如何在我的控制器中实现其方法 OnAuthentication() 和 OnAuthenticationChallenge() 以及何时调用它们。
如果有人可以向我解释或与我分享任何解释这一点的链接,那将非常有帮助。即使我在 MSDN 中也找不到任何相关资源。
用于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);
}
}
您可以使用自己的值临时更改 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");
}