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