Bagikan melalui


Perilaku autentikasi titik akhir API di ASP.NET Core

Saat menggunakan cookie autentikasi, titik akhir API mengembalikan kode status HTTP yang sesuai (seperti 401 atau 403) untuk kegagalan autentikasi alih-alih mengalihkan permintaan yang tidak diautentikasi ke halaman masuk. Perilaku ini, yang lebih cocok untuk akses API terprogram, diperkenalkan di ASP.NET Core di .NET 10.

Cara ASP.NET Core mengidentifikasi titik akhir API

ASP.NET Core secara otomatis menerapkan perilaku ini ke titik akhir yang dikenalinya sebagai terkait API, termasuk:

  • Pengontrol yang didekorasi dengan [ApiController] atribut
  • Titik akhir API minimal yang terdaftar dengan MapGet, , MapPostMapPut, MapDelete, dll.
  • Titik akhir yang secara eksplisit meminta respons JSON
  • SignalR hub dan titik akhir

Perilaku dan kustomisasi default

Secara default, ASP.NET Core menerapkan cookie logika autentikasi berdasarkan jenis titik akhir:

  • Halaman web: Mengalihkan ke halaman masuk
  • Titik akhir API: Mengembalikan kode status 401 atau 403 tanpa pengalihan

Mengonfigurasi perilaku

Meskipun perilaku default berfungsi untuk sebagian besar skenario, perilaku tersebut dapat disesuaikan jika diperlukan:

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

Jika Anda perlu mengambil alih deteksi otomatis untuk titik akhir tertentu, gunakan [Authorize] atribut dengan skema autentikasi tertentu atau terapkan penangan autentikasi kustom.

Pertimbangan migrasi

Perubahan perilaku yang diperkenalkan dalam .NET 10 ini dirancang agar tidak melanggar untuk aplikasi yang ada:

  • Aplikasi web: Terus bekerja seperti sebelumnya dengan pengalihan halaman masuk
  • Aplikasi campuran: Titik akhir API mendapatkan kode status yang tepat saat halaman web mendapatkan pengalihan
  • Aplikasi khusus API: Manfaatkan kode status HTTP yang tepat tanpa konfigurasi tambahan

Menguji titik akhir API Anda

Setelah meningkatkan ke ASP.NET Core 10, verifikasi bahwa titik akhir API Anda mengembalikan kode status yang sesuai:

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