Dela via


BETEENDE för API-slutpunktsautentisering i ASP.NET Core

När du använder cookie autentisering returnerar API-slutpunkter lämpliga HTTP-statuskoder (till exempel 401 eller 403) för autentiseringsfel i stället för att omdirigera oautentiserade begäranden till inloggningssidor. Det här beteendet, som är mer lämpligt för programmatisk API-åtkomst, introducerades i ASP.NET Core i .NET 10.

Så här identifierar ASP.NET Core API-slutpunkter

ASP.NET Core tillämpar automatiskt det här beteendet på slutpunkter som identifieras som API-relaterade, inklusive:

  • Kontrollanter som är dekorerade med [ApiController] attributet
  • Minimala API-slutpunkter som registrerats med MapGet, MapPost, MapPut, MapDeleteosv.
  • Slutpunkter som uttryckligen begär JSON-svar
  • SignalR hubbar och slutpunkter

Standardbeteende och anpassning

Som standard tillämpar ASP.NET Core autentiseringslogik cookie baserat på slutpunktstypen:

  • Webbsidor: Omdirigera till inloggningssidor
  • API-slutpunkter: Returnera 401- eller 403-statuskoder utan omdirigeringar

Konfigurera beteendet

Standardbeteendet fungerar för de flesta scenarier, men det kan anpassas om det behövs:

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

Om du behöver åsidosätta den automatiska identifieringen för specifika slutpunkter använder du [Authorize] attributet med specifika autentiseringsscheman eller implementerar anpassade autentiseringshanterare.

Överväganden vid migrering

Den här beteendeändringen som introduceras i .NET 10 är utformad för att inte brytas för befintliga program:

  • Webbprogram: Fortsätt att fungera som tidigare med omdirigeringar av inloggningssidan
  • Blandade program: API-slutpunkter får rätt statuskoder medan webbsidor får omdirigeringar
  • API-program: Dra nytta av rätt HTTP-statuskoder utan ytterligare konfiguration

Testa DINA API-slutpunkter

När du har uppgraderat till ASP.NET Core 10 kontrollerar du att DINA API-slutpunkter returnerar lämpliga statuskoder:

[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
}