Ich habe Probleme beim Einrichten der Authentifizierung in meinem Webdienst. Der Dienst wird mit der ASP.NET Core-Web-API erstellt.
Alle meine Clients (WPF-Anwendungen) sollten dieselben Anmeldeinformationen verwenden, um die Webdienstvorgänge aufzurufen.
Nach einigen Recherchen habe ich mir eine grundlegende Authentifizierung ausgedacht - das Senden eines Benutzernamens und eines Passworts im Header der HTTP-Anfrage. Nach stundenlangen Recherchen scheint mir die grundlegende Authentifizierung in ASP.NET Core jedoch nicht der richtige Weg zu sein.
Die meisten Ressourcen, die ich gefunden habe, implementieren die Authentifizierung mit OAuth oder einer anderen Middleware. Aber das scheint für mein Szenario und die Verwendung des Identitätsteils von ASP.NET Core übergroß zu sein.
Was ist der richtige Weg, um mein Ziel zu erreichen - einfache Authentifizierung mit Benutzername und Passwort in einem ASP.NET Core-Webdienst?
Danke im Voraus!
Nachdem ich in die richtige Richtung gezeigt wurde, ist hier meine vollständige Lösung:
Dies ist die Middleware-Klasse, die bei jeder eingehenden Anforderung ausgeführt wird und prüft, ob die Anforderung die richtigen Anmeldeinformationen enthält. Wenn keine Anmeldeinformationen vorhanden sind oder wenn sie falsch sind, antwortet der Dienst sofort mit einem 401 Unauthorized- Fehler.
Die Middleware-Erweiterung muss in der Configure-Methode der Service Startup-Klasse aufgerufen werden
Und das ist alles! :) :)
Eine sehr gute Ressource für Middleware in .Net Core und Authentifizierung finden Sie hier: https://www.exceptionnotfound.net/writing-custom-middleware-in-asp-net-core-1-0/
quelle
Um dies beispielsweise nur für bestimmte Steuerungen zu verwenden, verwenden Sie Folgendes:
quelle
Ich denke, Sie können mit JWT (Json Web Tokens) gehen.
Zuerst müssen Sie das Paket System.IdentityModel.Tokens.Jwt installieren:
Sie müssen einen Controller für die Token-Generierung und -Authentifizierung wie diesen hinzufügen:
Nach diesem Update sieht die Startup.cs-Klasse wie folgt aus:
Und das war's, was jetzt noch übrig ist, ist zu sagen
[Authorize]
gewünschten Controllern oder Aktionen Attribute zuzuweisen.Hier ist ein Link zu einem vollständigen, einfachen Tutorial.
http://www.blinkingcaret.com/2017/09/06/secure-web-api-in-asp-net-core/
quelle
Ich habe
BasicAuthenticationHandler
für die Basisauthentifizierung implementiert, damit Sie es mit StandardattributenAuthorize
und verwenden könnenAllowAnonymous
.Registrierung bei Startup.cs -
app.UseMiddleware<BasicAuthenticationMiddleware>();
. Mit diesem Code können Sie jeden Controller mit dem Standardattribut Autorize einschränken:und verwenden Sie das Attribut,
AllowAnonymous
wenn Sie den Autorisierungsfilter auf Anwendungsebene anwenden.quelle
In diesem öffentlichen Github-Repo https://github.com/boskjoett/BasicAuthWebApi sehen Sie ein einfaches Beispiel für eine ASP.NET Core 2.2-Web-API mit Endpunkten, die durch die Standardauthentifizierung geschützt sind.
quelle
Wie in früheren Beiträgen zu Recht erwähnt, besteht eine Möglichkeit darin, eine benutzerdefinierte Basisauthentifizierungs-Middleware zu implementieren. In diesem Blog habe ich den besten Arbeitscode mit Erläuterungen gefunden: Basic Auth mit benutzerdefinierter Middleware
Ich habe auf denselben Blog verwiesen, musste aber zwei Anpassungen vornehmen:
Fügen Sie beim Lesen des Benutzernamens und des Kennworts aus der Datei appsettings.json eine statische schreibgeschützte Eigenschaft in die Startdatei ein. Dann lesen Sie aus appsettings.json. Lesen Sie abschließend die Werte von einer beliebigen Stelle im Projekt. Beispiel:
quelle
ASP.NET Core 2.0 mit Angular
https://fullstackmark.com/post/13/jwt-authentication-with-aspnet-core-2-web-api-angular-5-net-core-identity-and-facebook-login
Stellen Sie sicher, dass Sie den Typ des Authentifizierungsfilters verwenden
[Authorize (AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
quelle