Ich verwende die ASP.NET MVC 4-Webanwendung als Front-End für einige WCF-Dienste. Die gesamte Benutzeranmeldung / -abmeldung und Sitzungssteuerung erfolgt auf dem Back-End. Die MVC-App sollte nur einen einzelnen Cookie mit Sitzungs-ID speichern. Mein Client erlaubt keine Formularauthentifizierung, alles muss angepasst werden.
Ich habe Folgendes in meiner web.config eingerichtet:
%Vor%Ich habe auch einen globalen Filter:
%Vor%welches in Global.asax
aufgerufen wird %Vor%Ich habe mit [AllowAnonymous] alle Controller und Aktionen markiert, die keine Autorisierung benötigen.
Und jetzt muss ich MyAuthorizeAttribute implementieren. Ich habe einige Tutorials ausprobiert, aber keines von ihnen passt perfekt zu meinen Szenarien.
Grundsätzlich muss ich die folgenden Szenarien für jede Aktion behandeln:
Soweit ich es verstehe, muss ich AuthorizeCore überschreiben (um zu überprüfen, ob meine Sitzung existiert und noch gültig ist) und HandleUnauthorizedRequest (um Benutzer auf Home / Index umzuleiten anstelle der Standard-Login-Seite).
Für die Umleitung habe ich versucht:
%Vor%scheint das zweite Szenario zu verarbeiten (ich bin mir nicht sicher, ob es sich um einen Basisanruf handelt - ist es nötig?).
Für das erste Szenario muss ich AuthorizeCore implementieren. Ich bin mir nicht sicher, wie ich es richtig machen soll. Ich habe gesehen, dass AuthorizeAttribute Code für die Behandlung von Caching-Situationen und möglicherweise viele weitere versteckte Funktionen hat und ich möchte es nicht brechen.
Für das dritte Szenario bin ich nicht sicher, ob MyAuthorizeAttribute damit umgehen kann. Kann AuthorizeAttribute Ausnahmen abfangen, die innerhalb der Aktion auftreten, oder muss ich SecurityFault.SessionExpired Situationen in meinem globalen Fehlerhandler behandeln?
Nicht ganz sicher, ob ich es erhalte, aber wenn Sie einen benutzerdefinierten Autorisierungsfilter erstellen, der das Attribut System.Web.MVC.Authorize wie folgt erbt.
%Vor%Und dann dekorieren Sie Ihre Methoden, die diese Autorisierung verwenden müssen, die den Trick machen?
In Bezug auf Ihre erste Anforderung:
Wie Sie bereits herausgefunden haben, kümmert sich OnAuthorization
um eine Reihe von Aspekten, einschließlich z. Caching.
Wenn Sie nur an der Anpassung der Benutzeranmeldeinformationen interessiert sind, sollten Sie stattdessen AuthorizeCore
überschreiben. Zum Beispiel:
Vielleicht möchten Sie auch einen Blick auf diese anderen Themen werfen:
So habe ich es jetzt gemacht:
%Vor%Es geht jedoch nicht mit meinem 3. Szenario, also werde ich es in einem globalen Fehlerhandler implementieren.
Tags und Links asp.net-mvc authorize-attribute custom-authentication