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 Resultat

    FormsAuthentication.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
    Samuel

    P.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)


Anmelden zum Antworten