2017-05-14 11 views
11

In ASP.NET Core 2.0 hat die Middleware .UseAuthentication() eine brechende Änderung, die old syntax mentioned here nicht mehr funktioniert.ASP.NET Core 2.0 Vorschau 1: Einrichten der Cookie-Authentifizierung mit benutzerdefiniertem Anmeldepfad

Die neue Version scheint mit config in addAuthentication umzugehen, aber ich kann nirgendwo Details darüber finden, wie ich meinen alten Code ändern kann, der eine benutzerdefinierte Anmelde- und Abmelde-URL angegeben hat.

 services.AddAuthentication(o => 
     { 
      // Where can I specify this????? 
      var opt = new CookieAuthenticationOptions() 
      { 
       LoginPath = "/api/login", 
       LogoutPath = "/api/logout", 
      }; 

      o.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; 
      o.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; 
     }); 

Jede mögliche Hilfe würde geschätzt ...

Antwort

9

wie dies aktualisiert hat sich in der 2 wieder leicht verändert.0 RTM Bits

Es stellt sich heraus, es ist viel einfacher als erwartet, aber als the official documentation noch nicht aktualisiert worden ist, hier ist genau das, was für Normal Plätzchen Auth funktioniert:

Konfiguration:

in ConfigureServices() den spezifischen Authentifizierungsmechanismus konfigurieren:

services 
    .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) 
    .AddCookie(o => 
    { 
     o.LoginPath = "/api/login"; 
     o.LogoutPath = "/api/logout"; 
     // additional config options here 
    }); 

dann in Configure() um tatsächlich die Middleware zu anschließen:

app.UseAuthentication(); 

Verwenden der Auth-Komponenten

dann die eigentlichen Auth Komponenten zu verwenden, die Logik von dem HttpContext.Authentication Objekt verschoben hat, auf nur HttpContext in Anwendungslogik wie Controller-Code:

await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, 
      new ClaimsPrincipal(identity)); 

oder:

await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); 
+3

Nur ein Hinweis: Sie müssen dieses nugget-Paket hinzufügen: "Microsoft.AspNetCore.Authentication.Cookies" für CookieAuthenticationDefaults, *** Defaults etc. –

+0

@Lost_In_Library - Sie müssen dies nicht hinzufügen, wenn Sie das ASP.NET verwenden Kern-Meta-Paket Sie fügen es nur hinzu, wenn Sie einzelne ASP.NET-Pakete explizit hinzufügen. –

+0

Ein weiterer Hinweis, um jemandem Kopfschmerzen zu ersparen: Die Erweiterungsmethode für HttpContext.SignInAsync wird nur angezeigt, wenn Sie den Import für "Microsoft.AspNetCore.Authentication" verwenden. –

9

Das Beispiel, das Sie geschrieben scheint nicht sowieso einen echten Code zu sein (das heißt new CookieAuthenticationOptions() innerhalb des AddAuthentication Anruf zu sein, und nicht als Argument AddCookieAuthentication). Sie fügen keine Autorisierungen innerhalb des AddAuthorization Aufrufs hinzu, Sie richten nur Standard-Middlewares hier ein, siehe this announcement.

Alt:

services.AddAuthentication(sharedOptions => 
     sharedOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme); 

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
    AutomaticChallenge = true, 
    AutomaticAuthenticate = true, 

Neu:

app.AddAuthentication(o => { 
    o.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; 
    o.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; 
    o.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; 
}); 

Und die

services.AddXxxAuthentication(new XxxOptions() { ... }); 

ersetzt mit

services.AddXxxAuthentication(options => { 
}); 

soll mit allen anderen Methoden, die eine Konfiguration akzeptieren, inline sein.

auch immer lohnt ein Blick auf die ASP.NET Core Announcements GitHub Repository, wo das ASP.NET Core Team wichtige Änderungen für die nächste Version gibt, wählen Sie einfach einen bestimmten Meilenstein dort, also 2.0.0-preview1, 2.0.0-preview2 usw.

+0

guter Beitrag, verbrachte einen halben Tag auf diesem. Alles, was Sie gesagt haben, ist in der Basisvorlage .netcoreapp2.0 (mit lokaler Autorisierung) sichtbar. Ein wichtiger Punkt zum Hinzufügen ist der Abschnitt ** HttpContext.Authentication wird veraltet **, da sich die Authentifizierungsmethode \ SignIn \ Signout usw. geändert hat – Nico

+0

Ich weiß, dass die Git Ankündigung anders angibt, aber in meinem Fall hat 'IApplicationBuilder' keine Methode namens' Add * ', also sollte' app.AddAuthentication (...) 'nicht' service.AddAuthentication (...) 'sein ? – jAC

+0

@JanesAbouChleih: Ja, ich denke schon. Wahrscheinlich ein Tippfehler beim manuellen Eintippen ohne IDE – Tseng

Verwandte Themen