Freigeben über


VERHALTEN der API-Endpunktauthentifizierung in ASP.NET Core

Bei Verwendung der cookie Authentifizierung geben API-Endpunkte die entsprechenden HTTP-Statuscodes (z. B. 401 oder 403) für Authentifizierungsfehler zurück, anstatt nicht authentifizierte Anforderungen an Anmeldeseiten umzuleiten. Dieses Verhalten, das für den programmgesteuerten API-Zugriff besser geeignet ist, wurde in ASP.NET Core in .NET 10 eingeführt.

Wie ASP.NET Core API-Endpunkte identifiziert

ASP.NET Core wendet dieses Verhalten automatisch auf Endpunkte an, die er als API-bezogene Erkennt, einschließlich:

  • Controller, die mit dem [ApiController] Attribut versehen sind
  • Minimale API-Endpunkte, die bei MapGet, MapPost, MapPut, MapDeleteusw. registriert sind.
  • Endpunkte, die JSON-Antworten explizit anfordern
  • SignalR Hubs und Endpunkte

Standardverhalten und Anpassung

Standardmäßig wendet cookie ASP.NET Core die Authentifizierungslogik basierend auf dem Endpunkttyp an:

  • Webseiten: Umleiten zu Anmeldeseiten
  • API-Endpunkte: Zurückgeben von Statuscodes 401 oder 403 ohne Umleitungen

Konfigurieren des Verhaltens

Während das Standardverhalten für die meisten Szenarien funktioniert, kann es bei Bedarf angepasst werden:

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.LoginPath = "/Account/Login";
        // The framework automatically handles API endpoints
        // No additional configuration needed
    });

Wenn Sie die automatische Erkennung für bestimmte Endpunkte außer Kraft setzen müssen, verwenden Sie das [Authorize] Attribut mit bestimmten Authentifizierungsschemas, oder implementieren Sie benutzerdefinierte Authentifizierungshandler.

Überlegungen zur Migration

Diese In .NET 10 eingeführte Verhaltensänderung ist so konzipiert, dass sie für vorhandene Anwendungen nicht unterbrochen wird:

  • Webanwendungen: Arbeiten wie zuvor mit Umleitungen der Anmeldeseite
  • Gemischte Anwendungen: API-Endpunkte erhalten die richtigen Statuscodes, während Webseiten Umleitungen erhalten
  • Nur-API-Anwendungen: Profitieren Sie von ordnungsgemäßen HTTP-Statuscodes ohne zusätzliche Konfiguration

Testen ihrer API-Endpunkte

Überprüfen Sie nach dem Upgrade auf ASP.NET Core 10, ob Ihre API-Endpunkte geeignete Statuscodes zurückgeben:

[Test]
public async Task UnauthorizedApiRequest_Returns401()
{
    var response = await client.GetAsync("/api/secure-data");
    Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);
    Assert.False(response.Headers.Location != null); // No redirect
}