Dotnet-core-2.0-Authentifizierung mehrere schemas Identität cookies und jwt

In dotnet core 1.1 asp, ich war in der Lage, zu konfigurieren und zu verwenden, Identität middleware, gefolgt von jwt-middleware, indem Sie Folgendes tun:

  app.UseIdentity();
  app.UseJwtBearerAuthentication(new JwtBearerOptions() {});

Dies hat sich nun geändert, dass wir die Umsetzung der middleware mit:

   app.UseAuthentication();

Konfiguration der Einstellungen erfolgt über die ConfigureServices Abschnitt von Start.cs.

Gibt es einige Hinweise auf die Verwendung von Autorisierungs-schema ist in der migration-Dokumentation:

https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x#authentication-middleware-and-services

In 2.0-Projekte, Authentifizierung konfiguriert ist, über services. Jeder
Authentifizierungsschema ist eingetragen im ConfigureServices Methode
Startup.cs. Die UseIdentity Methode ersetzt, mit UseAuthentication.

Zusätzlich gibt es einen Verweis auf:

Festlegen Von Standard-Authentifizierungsschemas

In 1.x, die AutomaticAuthenticate und AutomaticChallenge Eigenschaften
wurden bestimmt, um auf einer einzigen Authentifizierung Schema. Es war
kein guter Weg, um dies durchzusetzen.

In 2.0, diese beiden Eigenschaften wurden
entfernt als flags für die einzelnen AuthenticationOptions Instanz und
haben verschoben in die Basis AuthenticationOptions Klasse. Die Eigenschaften
kann konfiguriert werden, in der AddAuthentication Aufruf der Methode innerhalb der
ConfigureServices Methode von Startup.cs:

Alternativ verwenden Sie eine überladene version der AddAuthentication
Methode, um mehr als eine Eigenschaft. In den folgenden überlastet
Methode B. das Standard-Schema festgelegt ist
CookieAuthenticationDefaults.AuthenticationScheme. Die Authentifizierung
das Schema kann alternativ angegeben werden, innerhalb Ihrer individuellen
[Autorisieren] Attribute oder Autorisierungsrichtlinien.

Ist es noch möglich in dotnet core 2.0 verwenden mehrere Authentifizierungs-schemas? Ich kann nicht den Richtlinien bezüglich des JWT Konfiguration "("Bearer" - schema), und nur Identität arbeitet derzeit mit beiden konfiguriert. Ich kann nicht finden keine Proben der mehreren Authentifizierungs-schemas.

Edit:

Habe ich Lesen Sie die Dokumentation, und jetzt verstehen Sie, dass die:

app.UseAuthentication()

fügt automatische Authentifizierung gegen ein Standard-schema. Identität konfiguriert die Standard-Schemata für Sie.

Habe ich bekommen, um das Problem mit dem, was scheint wie ein hack, die gegen die neue api folgt im Autostart.cs Konfigurieren:

    app.UseAuthentication();
    app.Use(async (context, next) =>
    {
        if (!context.User.Identity.IsAuthenticated)
        {
            var result = await context.AuthenticateAsync(JwtBearerDefaults.AuthenticationScheme);
            if (result?.Principal != null)
            {
                context.User = result.Principal;
            }
        }

        await next.Invoke();
    });

Ist das der richtige Weg, dies zu tun, oder sollte ich die Ausnutzung der Rahmen -, DI-und Schnittstellen für benutzerdefinierte Implementierungen der IAuthenticationSchemeProvider?

Bearbeiten - Weitere details der Implementierung und wo es zu finden ist.

Den JWT Config kann hier gefunden werden, und ich bin mit Richtlinien definieren die Berechtigung, zu denen die akzeptiert auth-schema ist:

https://github.com/Arragro/ArragroCMS/blob/master/src/ArragroCMS.Management/Startup.cs

Custom-middleware ist immer noch implementiert. Der Auth-controller ist hier:

https://github.com/Arragro/ArragroCMS/blob/master/src/ArragroCMS.Web.Management/ApiControllers/AuthController.cs

Es nutzt API-Keys generiert die app, um nur-Lesen-Zugriff auf die Daten. Sie finden die Implementierung einer Steuerung unter Verwendung der policy hier:

https://github.com/Arragro/ArragroCMS/blob/master/src/ArragroCMS.Web.Management/ApiControllers/SitemapController.cs

Ändern Sie die DB-Verbindungszeichenfolge zu Ihrem SQL Server, und führen Sie die Anwendung. Es migriert die DB automatisch und konfiguriert ein Administrator - ([email protected] - ArragroPassword1!). Dann gehen Sie auf die Registerkarte "Einstellungen" in der Menüleiste und klicken Sie auf "Konfigurieren der JWT ReadOnly-API-Key Einstellungen", um einen Schlüssel. In Briefträger, bekommen jwt token konfigurieren Sie eine neue Registerkarte, und setzen Sie es auf die POST an der folgenden Adresse:

http://localhost:5000/api/auth/readonly-token

Versorgung des headers: Content-Type: application/json

Versorgen den Körper:

{
    "apiKey": "the api token from the previous step"
}

Kopieren Sie den token in der Antwort, und verwenden Sie dann die folgenden in postman:

http://localhost:5000/api/sitemap/flat

Authorization: "bearer - The token you received in the previous request"

Wird es funktionieren inititally, weil der custom-middleware. Kommentieren Sie den code oben erwähnt, und versuchen Sie es erneut und Sie erhalten eine 401.

Edit -@DonnyTian Antwort unten zeigt meine Lösung in seinen Kommentaren. Das problem, das ich hatte war Einstellung eine default-policy auf UseMvc, aber nicht der Versorgung des Schemas:

    services.AddMvc(config =>
    {
        var defaultPolicy = new AuthorizationPolicyBuilder(new[] { JwtBearerDefaults.AuthenticationScheme, IdentityConstants.ApplicationScheme })
                         .RequireAuthenticatedUser()
                         .Build();
        config.Filters.Add(new AuthorizeFilter(defaultPolicy));
        config.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
        config.Filters.Add(new ValidateModelAttribute());
    });

Anschluss an die Beratung, das funktioniert, ohne zusätzliche middleware.

  • teilen Sie Ihre JWT Konfigurations-code in der ConfigureServices.
  • Der code für diese ist hier erhältlich: github.com/Arragro/ArragroCMS/blob/master/src/.... Aktuelle Umsetzung mit custom-middleware funktioniert, aber ich würde eher das schema der Umsetzung in der Politik/auth-Attribut
InformationsquelleAutor didiHamman | 2017-08-20
Schreibe einen Kommentar