3

ASP.NET MVC の Controller クラスを調べていたところ、IAuthenticationFilter インターフェイスが実装されていることがわかりました。ただし、コントローラーでメソッド OnAuthentication() および OnAuthenticationChallenge() を実装する方法と、これらがいつ呼び出されるかを理解できません。

誰かが私に説明してくれるか、これを説明するリンクを私と共有してくれれば、非常に役に立ちます。私でさえ、MSDN でこれに関するリソースを見つけることができませんでした。

4

2 に答える 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);
     }
}
于 2013-12-03T22:16:09.920 に答える
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");

}
于 2013-07-07T08:33:32.813 に答える