Einfach zu verwendende und sehr leichte Microsoft-artige Basic Scheme Authentication-Implementierung für ASP.NET Core.
Auf GitHub ansehen
.NET Framework 4.6.1 und/oder NetStandard 2.0 und höher
Mehrfachzielgerichtet: net8.0; net7.0; net6.0; net5.0; netcoreapp3.1; netcoreapp3.0; netstandard2.0; net461
Diese Bibliothek ist auf NuGet veröffentlicht. Das NuGet-Paket kann also direkt in Ihrem Projekt installiert werden, wenn Sie es verwenden möchten, ohne benutzerdefinierte Änderungen am Code vorzunehmen.
Laden Sie es direkt über den folgenden Link herunter. Bitte erwägen Sie den Download des neuen Pakets, da das alte veraltet ist.
Neuer Paketlink – AspNetCore.Authentication.Basic.
Link zum alten Paket – Mihir.AspNetCore.Authentication.Basic.
Oder indem Sie den folgenden Befehl für Ihr Projekt ausführen.
PM> Install-Package AspNetCore.Authentication.Basic
Beispiele sind im Beispielverzeichnis verfügbar.
Die Einrichtung ist ganz einfach. Um mit der Verwendung dieser Bibliothek beginnen zu können, benötigen Sie grundlegende Kenntnisse in ASP.NET Core 2.0 oder höher.
Es gibt zwei verschiedene Möglichkeiten, diese Bibliothek für ihre Aufgaben zu nutzen. Bei Bedarf können beide Wege gemischt werden.
1] Verwendung der Implementierung von IBasicUserValidationService
2] Verwenden von BasicOptions.Events (OnValidateCredentials-Delegat), dem gleichen Ansatz, den Sie auch in den Authentifizierungsbibliotheken von Microsoft finden
Hinweise:
Es erfordert, dass Realm in den Optionen festgelegt wird, wenn SuppressWWWAuthenticateHeader nicht festgelegt ist.
Wenn eine Implementierung der IBasicUserValidationService-Schnittstelle verwendet wird und auch der Delegierte BasicOptions.Events.OnValidateCredentials festgelegt ist, wird dieser Delegat zuerst verwendet.
Verwenden Sie in der Produktion immer das Protokoll HTTPS (SSL-Zertifikat), wenn Sie die Basisauthentifizierung verwenden.
using AspNetCore.Authentication.Basic;public class Startup{public voidConfigureServices(IServiceCollection services){// Es erfordert, dass Realm in den Optionen festgelegt wird, wenn SuppressWWWAuthenticateHeader nicht festgelegt ist.// Wenn eine Implementierung der IBasicUserValidationService-Schnittstelle sowie Optionen verwendet werden Wenn auch der Delegat .Events.OnValidateCredentials festgelegt ist, wird dieser Delegat verwendet first.services.AddAuthentication(BasicDefaults.AuthenticationScheme)// Das folgende AddBasic ohne Typparameter erfordert die Festlegung von options.Events.OnValidateCredentials delegete.//.AddBasic(options => { options.Realm = "My App"; }) ;// Der folgende Parameter „AddBasic with type“ fügt den BasicUserValidationService zum Abhängigkeitscontainer hinzu. .AddBasic<BasicUserValidationService>(options => { options.Realm = "My App"; });services.AddControllers();//// Standardmäßig wird die Authentifizierung nicht für jede Anfrage abgefragt, was die Standardeinstellung von ASP.NET Core ist Verhalten.//// Um die Authentifizierung für alle Anfragen abzufragen, verwenden Sie bitte die folgende FallbackPolicy-Option.//services.AddAuthorization(options =>//{// options.FallbackPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();//});}public voidConfigure(IApplicationBuilder app, IHostingEnvironment env){app.UseHttpsRedirection();// Die folgende Reihenfolge der Pipelinekette ist important!app.UseRouting();app.UseAuthentication();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});}}
using AspNetCore.Authentication.Basic;public class Startup{public voidConfigureServices(IServiceCollection services){// Es erfordert, dass Realm in den Optionen festgelegt wird, wenn SuppressWWWAuthenticateHeader nicht festgelegt ist.// Wenn eine Implementierung der IBasicUserValidationService-Schnittstelle sowie Optionen verwendet werden Wenn auch der Delegat .Events.OnValidateCredentials festgelegt ist, wird dieser Delegat verwendet first.services.AddAuthentication(BasicDefaults.AuthenticationScheme)// Das folgende AddBasic ohne Typparameter erfordert die Festlegung von options.Events.OnValidateCredentials delegete.//.AddBasic(options => { options.Realm = "My App"; }) ;// Der folgende Parameter „AddBasic with type“ fügt den BasicUserValidationService zum Abhängigkeitscontainer hinzu. .AddBasic<BasicUserValidationService>(options => { options.Realm = "My App"; });services.AddMvc();//// Standardmäßig wird die Authentifizierung nicht für jede Anfrage abgefragt, was die Standardeinstellung von ASP.NET Core ist Verhalten.//// Um die Authentifizierung für alle Anfragen abzufragen, verwenden Sie bitte die folgende Option anstelle der oben genannten Services.AddMvc().//services.AddMvc(options => //{// options.Filters.Add(new AuthorizeFilter(new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build()));//});}public voidConfigure(IApplicationBuilder app, IHostingEnvironment env){app.UseAuthentication( );app.UseMvc();}}
using AspNetCore.Authentication.Basic;public class BasicUserValidationService : IBasicUserValidationService{private readonly ILogger<BasicUserValidationService> _logger;private readonly IUserRepository _userRepository;public BasicUserValidationService(ILogger<BasicUserValidationService> logger, IUserRepository userRepository){_logger = logger;_userRepository = userRepository;}public async Task<bool> IsValidAsync(string username, string passwort){try{// HINWEIS: VERWENDEN SIE DIESE IMPLEMENTIERUNG NICHT. DIES IST NUR FÜR DEMO-ZWECKE // Schreiben Sie Ihre Implementierung hier und geben Sie je nach Validierung „true“ oder „false“ zurück isValid;}catch (Exception e){_logger.LogError(e, e.Message);throw;}}}
Muss festgelegt werden, wenn SuppressWWWAuthenticateHeader nicht auf „true“ festgelegt ist. Es wird mit dem WWW-Authenticate-Antwortheader verwendet, wenn nicht authentifizierte Anforderungen abgefragt werden.
Der Standardwert ist falsch.
Wenn dieser Wert auf „true“ gesetzt ist, wird beim Anfechten nicht authentifizierter Anforderungen KEIN WWW-Authenticate-Antwortheader zurückgegeben.
Wenn es auf „false“ gesetzt ist, wird der WWW-Authenticate-Antwortheader zurückgegeben, wenn nicht authentifizierte Anfragen abgefragt werden.
Der Standardwert ist falsch.
Wenn es auf „true“ gesetzt ist, prüft es, ob der AllowAnonymous-Filter auf Controller-Aktion oder Metadaten auf dem Endpunkt achtet. Wenn dieser gefunden wird, versucht er nicht, die Anfrage zu authentifizieren.
Das von der Anwendung bereitgestellte Objekt zur Verarbeitung von Ereignissen, die von der Basisauthentifizierungs-Middleware ausgelöst werden.
Die Anwendung kann die Schnittstelle vollständig implementieren oder eine Instanz von BasicEvents erstellen und Delegaten nur den Ereignissen zuweisen, die sie verarbeiten möchte.
Ein dieser Eigenschaft zugewiesener Delegat wird unmittelbar vor der Validierung der Anmeldeinformationen aufgerufen.
Sie müssen einen Delegaten für diese Eigenschaft angeben, damit die Authentifizierung erfolgen kann.
In Ihrem Delegaten sollten Sie entweder context.ValidationSucceeded() aufrufen, das die Konstruktion des Prinzipals für Authentifizierungsansprüche aus den Benutzerdetails übernimmt, denen die Eigenschaft context.Principal zugewiesen wird, und context.Success() aufruft, oder ein Prinzipal für Authentifizierungsansprüche aus dem Benutzer erstellen Details und weisen Sie es der context.Principal-Eigenschaft zu und rufen Sie schließlich die context.Success()-Methode auf.
Wenn nur die Eigenschaft context.Principal festgelegt wird, ohne die Methode context.Success() aufzurufen, wird die Methode Success() automatisch aufgerufen.
Ein dieser Eigenschaft zugewiesener Delegat wird aufgerufen, wenn die Authentifizierung erfolgreich ist. Es wird nicht aufgerufen, wenn ein OnValidateCredentials-Delegat zugewiesen ist.
Es kann zum Hinzufügen von Ansprüchen, Headern usw. zur Antwort verwendet werden.
Ein dieser Eigenschaft zugewiesener Delegat wird aufgerufen, wenn in der Bibliothek eine unerwartete Ausnahme ausgelöst wird.
Bei der Bearbeitung nicht autorisierter Antworten wird ein dieser Eigenschaft zugewiesener Delegat aufgerufen, bevor eine Aufforderung an den Anrufer zurückgesendet wird.
Verwenden Sie dies nur, wenn Sie wissen, was Sie tun, und wenn Sie eine benutzerdefinierte Implementierung verwenden möchten. Stellen Sie den Delegaten so ein, dass er sich mit 401-Herausforderungsproblemen befasst, wenn ein betreffendes Authentifizierungsschema eine Authentifizierungsinteraktion als Teil seines Anforderungsablaufs abwickelt. (z. B. das Hinzufügen eines Antwortheaders oder das Ändern des 401-Ergebnisses in 302 einer Anmeldeseite oder eines externen Anmeldeorts.)
Rufen Sie context.Handled() am Ende auf, damit die Standardlogik für diese Herausforderung übersprungen wird.
Ein dieser Eigenschaft zugewiesener Delegat wird aufgerufen, wenn die Autorisierung fehlschlägt und zu einer verbotenen Antwort führt.
Verwenden Sie dies nur, wenn Sie wissen, was Sie tun, und wenn Sie eine benutzerdefinierte Implementierung verwenden möchten.
Legen Sie fest, dass der Delegat „Verbieten“ behandelt.
Rufen Sie context.Handled() am Ende auf, damit jegliche Standardlogik übersprungen wird.
Bei ASP.NET Core werden alle Anfragen standardmäßig nicht zur Authentifizierung aufgefordert. Machen Sie sich also keine Sorgen, wenn Ihr BasicUserValidationService nicht erreicht wird, wenn Sie mit der Anfrage nicht die erforderlichen Basisauthentifizierungsdetails übergeben. Es ist ein normales Verhalten. ASP.NET Core fordert die Authentifizierung nur dann heraus, wenn es ausdrücklich dazu aufgefordert wird, entweder durch Verzieren des Controllers/der Methode mit dem Filterattribut [Autorisieren] oder auf andere Weise.
Wenn Sie jedoch möchten, dass alle Anfragen standardmäßig die Authentifizierung anfechten, können Sie abhängig von Ihrer Verwendung die folgende Optionszeile zur Methode „ConfigureServices“ in der Startup -Klasse hinzufügen.
// Auf ASP.NET Core 3.0 onwardsservices.AddAuthorization(options =>{options.FallbackPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();});// ODER// Auf ASP.NET Core 2.0 onwardsservices.AddMvc (Optionen => {options.Filters.Add(new AuthorizeFilter(new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build()));});
Wenn Sie MVC nicht verwenden, aber Endpoints auf ASP.NET Core 3.0 oder neuer verwenden, können Sie der Endpunktzuordnung unter Methode für Startklasse konfigurieren eine Kettenmethode .RequireAuthorization()
hinzufügen, wie unten gezeigt.
// Ab ASP.NET Core 3.0app.UseEndpoints(endpoints =>{endpoints.MapGet("/", async context =>{await context.Response.WriteAsync("Hello World!");}).RequireAuthorization(); / / BEACHTEN SIE DAS HIER!!!! });
ASP.NET Core unterstützt das Hinzufügen mehrerer Authentifizierungsschemata, die auch von dieser Bibliothek unterstützt werden. Sie müssen lediglich die Erweiterungsmethode verwenden, die den Schemanamen als Parameter verwendet. Der Rest ist alles gleich. Dies kann auf viele verschiedene Arten erreicht werden. Nachfolgend finden Sie nur ein kurzes grobes Beispiel.
Bitte beachten Sie, dass der Parameter „Schemaname“ eine beliebige Zeichenfolge sein kann.
public void configureServices(IServiceCollection Services){services.AddTransient<IUserRepository, InMemoryUserRepository>();services.AddAuthentication("Scheme1").AddBasic<BasicUserValidationService>("Scheme1", options => { options.Realm = "My App"; }).AddBasic<BasicUserValidationService_2>("Scheme2", Optionen => { options.Realm = "My App" }).AddBasic("Scheme3", options => { options.Realm = "Meine App"; options.Events = new BasicEvents{OnValidateCredentials = async (context) =>{var userRepository = context.HttpContext.RequestServices.GetRequiredService<IUserRepository>();var user = waiting userRepository.GetUserByUsername(context.Username);var isValid = user ! = null && user.Password == context.Password;if (isValid){context.Response.Headers.Add("ValidationCustomHeader", "From OnValidateCredentials");var Claims = new[]{new Claim("CustomClaimType", "Custom Claim Value - from OnValidateCredentials")};context.ValidationSucceeded (Ansprüche); // Ansprüche sind optional}else{context.ValidationFailed();}}}});services.AddControllers();services.AddAuthorization(options =>{options.FallbackPolicy = new AuthorizationPolicyBuilder("Scheme1", "Scheme2", " Scheme3").RequireAuthenticatedUser().Build();});}
Version | Notizen |
---|---|
8.0.0 |
|
7.0.0 |
|
6.0.1 |
|
5.1.0 |
|
5.0.0 |
|
3.1.1 |
|
3.1.0 |
|
2.2.0 |
|
RFC 7617: Technische Spezifikation für HTTP Basic
ASP.NET Core Security-Dokumentation
aspnet/Sicherheit
MIT-Lizenz