ASP.NET MVC 5, das in der kürzlich veröffentlichten Visual Studio 2013 Developer Preview enthalten ist, ermöglicht Entwicklern die Anwendung von Authentifizierungsfiltern, die die Möglichkeit bieten, eine Vielzahl von Drittanbietern oder benutzerdefinierten Authentifizierungsanbietern zur Authentifizierung zu verwenden Benutzer. Diese Filter werden jedoch vor dem Aufruf des Autorisierungsfilters angewendet.
Um einen Authentifizierungsfilter zu erstellen, müssen Entwickler ein neues C# ASP.NET-Projekt erstellen und MVC aus den aufgelisteten Projekttypen auswählen. Eric Vogel, leitender Softwareentwicklungsingenieur bei Kunz, Leigh & Associates, hat den Einsatz von Authentifizierungsfiltern getestet. Er erstellte einen benutzerdefinierten Filter, der Benutzer zurück zur Anmeldeseite umleitete, wenn sie nicht authentifiziert waren.
Eric hat ein CustomAttributes-Verzeichnis und eine neue Klasse CustomAttribute erstellt, die
ActionFilterAttribute和IAuthenticationFilter: public class BasicAuthAttribute: ActionFilterAttribute,IAuthenticationFilter
erbt. Die OnAuthentication()-Methode der Schnittstelle IAuthenticationFilter kann verwendet werden, um jede erforderliche Authentifizierung durchzuführen, und die OnAuthenticationChallenge-Methode schränkt diese ein Zugriff auf authentifizierte Benutzer basierend auf ihrer Identität.
Die OnAuthenticationChallenge-Methode empfängt den Parameter AuthenticationChallengeContext und ihr Implementierungscode lautet wie folgt:
public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext) { var user = filterContext.HttpContext.User; if (user == null || !user.Identity.IsAuthenticated) { filterContext.Result = new HttpUnauthorizedResult(); } }
Leser können den vollständigen Quellcode aus Erics Blogbeitrag erhalten. Die BasicAuthAttribute-Klasse lässt sich einfach testen. Öffnen Sie die HomeController-Klassendatei und fügen Sie den folgenden Code hinzu:
using VSMMvc5AuthFilterDemo.CustomAttributes;
Wenden Sie schließlich das benutzerdefinierte Attribut wie folgt auf die HomeController-Klasse an:
[BasicAuthAttribute] public class HomeController : Controller