Megosztás a következőn keresztül:


API-végpont hitelesítési viselkedése a ASP.NET Core-ban

Hitelesítés használatakor cookie az API-végpontok a hitelesítési hibákhoz a megfelelő HTTP-állapotkódokat (például 401 vagy 403) adják vissza ahelyett, hogy a hitelesítés nélküli kéréseket átirányítanák a bejelentkezési oldalakra. Ez a programozott API-hozzáféréshez jobban alkalmas viselkedés a .NET 10-es ASP.NET Core-ban lett bevezetve.

Hogyan azonosítja a ASP.NET Core az API-végpontokat?

ASP.NET Core automatikusan alkalmazza ezt a viselkedést az API-val kapcsolatosként felismert végpontokra, beleértve a következőket:

  • Az attribútummal [ApiController] díszített vezérlők
  • Minimális API-végpontok regisztrálvaMapGet, stbMapPostMapPutMapDelete.
  • Kifejezetten JSON-válaszokat kérő végpontok
  • SignalR központok és végpontok

Alapértelmezett viselkedés és testreszabás

Alapértelmezés szerint a ASP.NET Core a végpont típusa alapján alkalmazza cookie a hitelesítési logikát:

  • Weblapok: Átirányítás bejelentkezési lapokra
  • API-végpontok: 401-es vagy 403-es állapotkódokat ad vissza átirányítások nélkül

A viselkedés konfigurálása

Bár az alapértelmezett viselkedés a legtöbb forgatókönyv esetében működik, szükség esetén testre szabható:

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

Ha felül kell bírálnia az adott végpontok automatikus észlelését, használja az [Authorize] attribútumot adott hitelesítési sémákkal, vagy implementáljon egyéni hitelesítési kezelőket.

Migrálási szempontok

A .NET 10-ben bevezetett viselkedésváltozás úgy lett kialakítva, hogy a meglévő alkalmazások esetében ne legyen kompatibilitástörő:

  • Webalkalmazások: A bejelentkezési lap átirányításával a korábbiakhoz hasonlóan folytathatja a munkát
  • Vegyes alkalmazások: Az API-végpontok megfelelő állapotkódokat kapnak, míg a weblapok átirányításokat kapnak
  • Csak API-alkalmazások: A megfelelő HTTP-állapotkódok használata további konfiguráció nélkül

API-végpontok tesztelése

A ASP.NET Core 10-re való frissítés után ellenőrizze, hogy az API-végpontok megfelelő állapotkódokat adnak-e vissza:

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