直近でリリースされた Visual Studio 2013 Developer Preview に含まれる ASP.NET MVC 5 により、多様なサードパーティ・ベンダーやカスタム認証プロバイダーの機能を利用した認証フィルターを適用することが可能となった。ただし、これらのフィルターは認可のフィルターよりも優先して実行される。
認証フィルターを作成するためには、新規の C# ASP.NET プロジェクトを作成し、表示されたプロジェクトから MVC 形式を選択する。Kunz, Leigh & Associates の Senior Software Developer である Eric Vogel 氏は、未認証のユーザをログインページにリダイレクトするカスタムフィルターを作成し、認証フィルターについて検証している。
Eric氏は CustomAttributes ディレクトリを作成し、ActionFilterAttribute と IAuthenticationFilter を継承した CustomAttribute という名前のクラスを作成した。
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氏のブログ投稿で確認できる。HomeController.cs ファイルを開き、以下の様に BasicAuthAttribute クラスを HomeController クラスから参照することで容易にテストできる。
using VSMMvc5AuthFilterDemo.CustomAttributes;
最後に、以下の様にカスタム属性を HomeController クラスに付与する。
[BasicAuthAttribute]
public class HomeController : Controller