3

In meinem Asp.Net Core Web API verwendete ich Identität mit JWT-Träger-Authentifizierung. Es funktionierte reibungslos ohne viel Aufhebens. Hier ist der Code für das,Dotnet-Core 2.0 Verwendung der Identität mit JwtBearer-Authentifizierung

ConfigureServices():

services.AddIdentity<ApplicationUser, IdentityRole<int>>() 
      .AddEntityFrameworkStores<DataContext, int>() 
      .AddDefaultTokenProviders(); 

konfigurieren():

app.UseJwtBearerAuthentication(new JwtBearerOptions() 
      { 
       AutomaticAuthenticate = true, 
       AutomaticChallenge = true, 
       TokenValidationParameters = new TokenValidationParameters() 
       { 
        ValidIssuer = "localhost:4200", 
        ValidAudience = "localhost:4200", 
        ValidateIssuerSigningKey = true, 
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SuperSecretKey_GetThisFromAppSettings")), 
        ValidateLifetime = true 
       } 
      }); 

Und heute habe ich ein Upgrade auf Core 2.0 und die gesamte Technik .net Stapel. Von der begrenzten Hilfe dort zur Verfügung heraus habe ich Code wie folgt geändert ..

ConfigureServices()

services.AddIdentity<ApplicationUser, ApplicationRole>() 
       .AddEntityFrameworkStores<DataContext>() 
       .AddDefaultTokenProviders(); 



services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) 
       .AddJwtBearer(options => 
       { 
        options.Authority = "localhost:4200"; 
        options.Audience = "localhost:4200"; 
        options.RequireHttpsMetadata = false; 
        options.TokenValidationParameters = new TokenValidationParameters() 
       { 
        ValidateIssuerSigningKey = true, 
        ValidateIssuer = true, 
        ValidateLifetime = true, 
        ValidIssuer = "localhost:4200", 
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SuperSecretKey_GetThisFromAppSettings")) 
       }; 
      }); 

konfigurieren()

app.UseAuthentication(); 

Nun ist die Authentifizierung nicht funktioniert. Sieht so aus, als wäre es intern so konfiguriert, dass es die Cookie-Authentifizierung verwendet.

Ist noch jemand auf dieses Szenario gestoßen? Jede Hilfe dazu ist wirklich geschätzt!

Danke,

Antwort

5

Wenn ich

https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x

Identität fügt Cookies richtig von der MS-Website verstehen und stellt die Standard-Authentifizierung an das Cookie-Schema. Versuchen Sie

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)

zu

services.AddAuthentication(o => { 
    o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; 
}) 
+0

Hey, es hat funktioniert! und vielen Dank. Aber ich habe noch eine Frage. Wissen Sie, wie Sie die Standardumleitung auf die Anmeldeseite während eines nicht autorisierten Zugriffs stoppen können? Anstatt der Umleitung muss ich den HTTP-Statuscode an den Client senden. – Wijitha

+0

Kein Problem, ich nehme an, es gibt bessere Möglichkeiten, aber da Sie Identity und CookieAuthentication als 2. Auth-Schema verwenden, können Sie den Login-Pfad verwenden, da er darauf zurückgreift. services.ConfigureApplicationCookie (Optionen => { Optionen.LoginPath = "/ somecontr/somefunc"; }); und gib zurück, was immer du brauchst. public IActionResult somefunc() return Statuscode (418) –

1

In Antwort auf die Frage zu ändern:

Wissen Sie, wie Standard-Umleitung beenden Seite während eines unberechtigten Zugriff melden?

Ich fand diesen Blogbeitrag von PioneerCode für Dotnet Core 1, die hilfreich sein kann.

Dies ist, wie ich es umgesetzt und es hat funktioniert:

services.ConfigureApplicationCookie(options => { options.LoginPath = "/api/login"; 
    options.Events = new CookieAuthenticationEvents 
    { 
     OnRedirectToLogin = ctx => 
     { 
     if (ctx.Request.Path.StartsWithSegments("/api") && ctx.Response.StatusCode == 200) 
     { 
      ctx.Response.StatusCode = 401; 
      return Task.FromResult<object>(null); 
     } 

     ctx.Response.Redirect(ctx.RedirectUri); 
     return Task.FromResult<object>(null); 
     } 
    }; 
    }); 
Verwandte Themen