2016-05-01 4 views
5

Ich versuche Cookie-Authentifizierung in einer Asp.net Core App (DNX 4.5) zu verwenden. Beachten Sie, dass ich, da ich einen benutzerdefinierten Authentifizierungsmechanismus (Radius) verwende, nicht den von der Kernauthentifizierung bereitgestellten Standardmechanismus verwende. Wenn der Benutzer nicht authentifiziert ist, möchte ich auf eine Anmeldeseite umleiten.Asp.net Core Autorize Umleitung nicht passiert

Ich habe in Startup.cs den folgenden Code hinzugefügt. Die Idee ist, zum Login-Steuerung umgeleitet werden, wenn der Benutzer nicht authentifiziert wurde:

app.UseCookieAuthentication(options => { options.LoginPath = new Microsoft.AspNet.Http.PathString("/Login"); }); 

In my Home Controller ich habe:

[Authorize] 
public IActionResult Index() 
{ 
    return View(); 
} 

In meiner Anmeldung Controller ich wieder einen Blick auf die entsprechenden Radius Login-Formular:

[AllowAnonymous] 
public IActionResult Index() 
{ 
    return View(); 
} 

Allerdings, wenn ich die App ausführen, passiert die Weiterleitung nie. Mit Blick auf die Konsolenausgabe Ich sehe die folgenden:

warn: Microsoft.AspNet.Mvc.Controllers.ControllerActionInvoker[0] 
     Authorization failed for the request at filter 'Microsoft.AspNet.Mvc.Filters.AuthorizeFilter'. 
info: Microsoft.AspNet.Mvc.ChallengeResult[1] 
     Executing ChallengeResult with authentication schemes(). 
info: Microsoft.AspNet.Mvc.Infrastructure.MvcRouteHandler[2] 
     Executed action ThingsProjectorWeb.Controllers.HomeController.Index in 0ms 
info: Microsoft.AspNet.Hosting.Internal.HostingEngine[2] 
     Request finished in 0.0016ms 401 

Jede Hilfe, wie dies zu konfigurieren, richtig wäre sehr dankbar. Vielen Dank!

Antwort

8

OK fand es heraus. Es ist alles hier erklärt:

Ich vermisste die options.AutomaticChallenge = true;, die Sie automatisch zum Login Controller umgeleitet.

Hier ist die aktualisierten Optionen:

app.UseCookieAuthentication(options => { 
       options.LoginPath = new Microsoft.AspNet.Http.PathString("/Login"); 
       options.AutomaticChallenge = true; 
      }); 

UPDATE:

Ab Version 1.1.0 es ist:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
     LoginPath = new Microsoft.AspNetCore.Http.PathString("/Account/Login"), 
     AutomaticChallenge = true 
}); 
+0

Dies funktioniert nicht für mich auf IISIntergration. Auf Kestrel bekomme ich eine perfekte 302, aber auf IIS bekomme ich eine 401. Gibt es etwas, was Sie getan haben, damit es auch auf IISIntergration funktioniert? –

+0

@MitchDart Es könnte sein, dass IIS standardmäßig FormsAuthentication ist. Versuchen Sie, in die Webkonfiguration? – Strake

+0

Das funktioniert auch nicht für mich. Seit zwei Tagen versuche ich, umzuleiten. Müssen Sie vorher einen Dienst hinzufügen? Ich habe: services.AddSession(); Das sollte Unterstützung dafür hinzufügen. Core schon müde. Es funktioniert einfach nicht. – Sam