Basic Auth (eingestellt)
Diese Seite wurde automatisch aus dem Englischen übersetzt. Original lesen
Vorsicht
Eingestellt, nicht verwenden. Das Sisk.BasicAuth‑Paket wird nicht mehr gepflegt und ist auf NuGet veraltet, ohne Ersatzpaket. Sein BasicAuthenticateRequestHandler dekodiert die Base64‑Anmeldeinformationen, die von Standard‑HTTP‑Clients gesendet werden, nicht, sodass authentifizierte Anfragen abgelehnt werden. Implementieren Sie die Basic‑Authentifizierung mit Ihrem eigenen request handler, das HttpHeaderCollection.Authorization ausliest. Diese Seite wird nur zu historischen Zwecken bereitgehalten.
Das Basic‑Auth‑Paket fügt einen Request‑Handler hinzu, der das Basic‑Authentifizierungsschema in Ihrer Sisk‑Anwendung mit sehr wenig Konfiguration und Aufwand verarbeiten kann.
Basic‑HTTP‑Authentifizierung ist eine minimale Eingabeform zur Authentifizierung von Anfragen mittels Benutzer‑ID und Passwort, wobei die Sitzung ausschließlich vom Client gesteuert wird und keine Authentifizierungs‑ oder Zugriffstoken vorhanden sind.
Erfahren Sie mehr über das Basic‑Authentifizierungsschema in der MDN‑Spezifikation.
Installation #
Um zu beginnen, installieren Sie das Sisk.BasicAuth‑Paket in Ihrem Projekt:
> dotnet add package Sisk.BasicAuth
Sie können weitere Installationsmöglichkeiten für Ihr Projekt im NuGet‑Repository einsehen.
Erstellen Ihres Auth‑Handlers #
Sie können das Authentifizierungsschema für ein ganzes Modul oder für einzelne Routen steuern. Dafür schreiben wir zunächst unseren ersten Basic‑Authentifizierungs‑Handler.
In dem nachfolgenden Beispiel wird eine Verbindung zur Datenbank hergestellt, geprüft, ob der Benutzer existiert und das Passwort gültig ist, und anschließend wird der Benutzer im Context‑Bag gespeichert.
public class UserAuthHandler : BasicAuthenticateRequestHandler
{
public UserAuthHandler() : base()
{
Realm = "To enter this page, please, inform your credentials.";
}
public override HttpResponse? OnValidating(BasicAuthenticationCredentials credentials, HttpContext context)
{
DbContext db = new DbContext();
// In diesem Fall verwenden wir die E‑Mail als Feld für die Benutzer‑ID,
// daher suchen wir nach einem Benutzer anhand seiner E‑Mail.
User? user = db.Users.FirstOrDefault(u => u.Email == credentials.UserId);
if (user == null)
{
return base.CreateUnauthorizedResponse("Sorry! No user was found by this email.");
}
// prüft, ob das Passwort der Anmeldeinformationen für diesen Benutzer gültig ist.
if (!user.ValidatePassword(credentials.Password))
{
return base.CreateUnauthorizedResponse("Invalid credentials.");
}
// fügt den angemeldeten Benutzer zum HttpContext hinzu
// und setzt die Ausführung fort
context.Bag.Add("loggedUser", user);
return null;
}
}So verbinden Sie diesen Request‑Handler einfach mit unserer Route oder Klasse.
public class UsersController
{
[RouteGet("/")]
[RequestHandler(typeof(UserAuthHandler))]
public string Index(HttpRequest request)
{
User loggedUser = request.Bag.Get<User>();
return $"Hello, {loggedUser.Name}!";
}
}Oder mit der RouterModule‑Klasse:
public class UsersController : RouterModule
{
public ClientModule()
{
// all routes inside this class will be handled by
// UserAuthHandler.
base.HasRequestHandler(new UserAuthHandler());
}
[RouteGet("/")]
public string Index(HttpRequest request)
{
User loggedUser = request.Bag.Get<User>();
return $"Hello, {loggedUser.Name}!";
}
}Anmerkungen #
Die Hauptverantwortung der Basic‑Authentifizierung liegt auf der Client‑Seite. Speicherung, Cache‑Steuerung und Verschlüsselung werden allesamt lokal beim Client durchgeführt. Der Server erhält lediglich die Anmeldeinformationen und prüft, ob der Zugriff erlaubt ist oder nicht.
Beachten Sie, dass diese Methode nicht zu den sichersten gehört, da sie eine erhebliche Verantwortung auf den Client legt, was die Nachverfolgung und Aufrechterhaltung der Sicherheit seiner Anmeldeinformationen erschweren kann. Außerdem ist es entscheidend, dass Passwörter in einem sicheren Verbindungs‑Kontext (SSL) übertragen werden, da sie keine eigene Verschlüsselung besitzen. Ein kurzer Abfangvorgang in den Headern einer Anfrage kann die Zugangsdaten Ihres Benutzers preisgeben.
Setzen Sie für produktive Anwendungen auf robustere Authentifizierungslösungen und vermeiden Sie die Verwendung zu vieler vorgefertigter Komponenten, da diese möglicherweise nicht den Anforderungen Ihres Projekts entsprechen und es Sicherheitsrisiken aussetzen.