Delen via


Gedrag van API-eindpuntverificatie in ASP.NET Core

Bij het gebruik van cookie verificatie retourneren API-eindpunten de juiste HTTP-statuscodes (zoals 401 of 403) voor verificatiefouten in plaats van niet-geverifieerde aanvragen om te leiden naar aanmeldingspagina's. Dit gedrag, dat geschikter is voor programmatische API-toegang, is geïntroduceerd in ASP.NET Core in .NET 10.

Hoe ASP.NET Core API-eindpunten identificeert

ASP.NET Core dit gedrag automatisch toepast op eindpunten die worden herkend als API-gerelateerd, waaronder:

  • Controllers ingericht met het [ApiController] kenmerk
  • Minimale API-eindpunten die zijn geregistreerd bij MapGet, MapPost, MapPut, MapDeleteenzovoort.
  • Eindpunten die expliciet JSON-antwoorden aanvragen
  • SignalR hubs en eindpunten

Standaardgedrag en aanpassing

Standaard past ASP.NET Core verificatielogica toe cookie op basis van het eindpunttype:

  • Webpagina's: omleiden naar aanmeldingspagina's
  • API-eindpunten: retourneert 401- of 403-statuscodes zonder omleidingen

Het gedrag configureren

Hoewel het standaardgedrag werkt voor de meeste scenario's, kan het indien nodig worden aangepast:

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

Als u de automatische detectie voor specifieke eindpunten wilt overschrijven, gebruikt u het [Authorize] kenmerk met specifieke verificatieschema's of implementeert u aangepaste verificatiehandlers.

Overwegingen bij migratie

Deze gedragswijziging die is geïntroduceerd in .NET 10, is ontworpen om niet-brekend te zijn voor bestaande toepassingen:

  • Webtoepassingen: blijven werken zoals voorheen met omleiding van aanmeldingspagina's
  • Gemengde toepassingen: API-eindpunten krijgen de juiste statuscodes terwijl webpagina's omleidingen krijgen
  • API-alleen-toepassingen: profiteren van de juiste HTTP-statuscodes zonder aanvullende configuratie

Uw API-eindpunten testen

Nadat u een upgrade naar ASP.NET Core 10 hebt uitgevoerd, controleert u of uw API-eindpunten de juiste statuscodes retourneren:

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