Authentifizierungsverfahren zur Laufzeit bestimmen (ASP .Net MVC3)
-
Hallo zusammen
Ich muss zur Laufzeit pro ActionMethode unterschiedliche Authentifizierungsverfahren auswählen können. Bspw.class MyController: Controller{ [HttpAuthenticate] // sending back 401 Unauthorized public ActionResult A(){ return blah; } [FormsAuthenticate] // sending back a form for authentication public ActionResult B(){ return blah; } }
Ich habe hierfür zwei Klassen von AuthorizationAttribute abgeleitet, jedoch funktioniert das Ganze nicht wie erwünscht. Gebe ich bei AuthorizeCore false zurück, schickt er doch das WebFormular zurück, obwohl ich gerade vorher
Response.Status = "401 Unauthorized"; Response.AddHeader("WWW-Authenticate","BASIC Realm=SwissMentor Nexus"); Response.End();
gemacht habe. Gebe ich true zurück, wird die entsprechende ActionMethode unauthorisiert aufgerufen
Auch das Überschreiben von OnAuthorization führt leider nicht zum gewünschten ResultatFormsAuthentication.SetAuthCookie(Tokens[0],false); Response.Cookies.Add(new HttpCookie("ROSessionID",UserInfo.SessionID)); FilterContext.Result = new RedirectResult(Request.Url.AbsolutePath);
innerhalb von OnAutorization führt zu der Rückgabe des Anmeldeformulars (WTF??) :p
Wahrscheinlich versuche ich da am falschen Ort innerhalb der Pipeline einzugreifen und ich frage mich, wo denn der richtige Ort ist. Wie gesagt, wichtig ist, dass das erforderliche Authentifizierungsverfahren pro ActionMethode individuell definiert werden kann.
Beste Grüsse
SamuelP.S.
Ein Problem ist, dass beim Erstellen des Kontrollers durch Ninject bereits viele Objekte erstelle werden, welche eine gültige Authentifizierung erfordern, um korrekt zu arbeiten. Da jedoch der Kontroller vor OnAuthorization instanziert wird, ist der Request ungültig und dieselbe URL muss noch einmal aufgerufen werden (Diesmal mit Cookie, welches die erforderliche SessionID enthält)