ASP.NET MVC 5改進了基於過濾器的身份驗證

infoq發表於2013-09-10

  ASP.NET MVC 5包含在最近釋出的Visual Studio 2013開發者預覽版中,它使開發人員可以應用身份驗證過濾器,它們提供了使用各種第三方供應商或自定義的身份驗證提供程式進行使用者身份驗證的能力。不過,這些過濾器要在呼叫授權過濾器之前應用。

  為了建立身份驗證過濾器,開發人員需要新建一個C#ASP.NET工程,並且從列出的工程型別中選擇MVC。來自Kunz,Leigh&Associates公司的高階軟體開發工程師Eric Vogel已經測試了身份驗證過濾器的用法。他建立了一個自定義過濾器,如果使用者未通過身份驗證,就將其重定向回登入頁面。

  Eric建立了一個CustomAttributes目錄和一個新類CustomeAttribute,該類繼承了

ActionFilterAttribute和IAuthenticationFilter:
public class BasicAuthAttribute: ActionFilterAttribute,IAuthenticationFilter

  介面IAuthenticationFilter的OnAuthentication()方法可以用於執行任何需要的身份驗證,而OnAuthenticationChallenge方法基於已驗證使用者的身份限制其訪問。

  OnAuthenticationChallenge方法接收AuthenticationChallengeContext引數,其實現程式碼如下所示:

public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
{
    var user = filterContext.HttpContext.User;
    if (user == null || !user.Identity.IsAuthenticated)
    {
        filterContext.Result = new HttpUnauthorizedResult();
    }
}

  讀者可以從Eric的博文獲得完整的原始碼。BasicAuthAttribute類很容易測試,開啟HomeController類檔案,並新增下面的程式碼即可:

using VSMMvc5AuthFilterDemo.CustomAttributes;

  最後,將自定義屬性應用到HomeController類,如下所示:

[BasicAuthAttribute]
   public class HomeController : Controller

  英文原文:Improved Authentication with Filters in ASP.NET MVC 5

相關文章