Udostępnij za pomocą


Zachowanie uwierzytelniania punktu końcowego interfejsu API w programie ASP.NET Core

W przypadku korzystania z cookie uwierzytelniania punkty końcowe interfejsu API zwracają odpowiednie kody stanu HTTP (takie jak 401 lub 403) w przypadku błędów uwierzytelniania zamiast przekierowywania nieuwierzytelnionych żądań do stron logowania. To zachowanie, które jest bardziej odpowiednie dla programowego dostępu do interfejsu API, zostało wprowadzone w ASP.NET Core na platformie .NET 10.

Jak ASP.NET Core identyfikuje punkty końcowe interfejsu API

ASP.NET Core automatycznie stosuje to zachowanie do punktów końcowych rozpoznawanych jako związane z interfejsem API, w tym:

  • Kontrolery ozdobione atrybutem [ApiController]
  • Minimalna ilość punktów końcowych interfejsu API zarejestrowanych w MapGetsystemach , MapPost, MapPut, MapDeleteitp.
  • Punkty końcowe, które jawnie żądają odpowiedzi JSON
  • SignalR koncentratory i punkty końcowe

Domyślne zachowanie i dostosowywanie

Domyślnie ASP.NET Core stosuje cookie logikę uwierzytelniania na podstawie typu punktu końcowego:

  • Strony sieci Web: przekierowywanie do stron logowania
  • Punkty końcowe interfejsu API: zwracanie kodów stanu 401 lub 403 bez przekierowań

Konfigurowanie zachowania

Chociaż domyślne zachowanie działa w większości scenariuszy, można go dostosować w razie potrzeby:

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

Jeśli musisz zastąpić automatyczne wykrywanie określonych punktów końcowych, użyj atrybutu [Authorize] z określonymi schematami uwierzytelniania lub zaimplementuj niestandardowe procedury obsługi uwierzytelniania.

Zagadnienia dotyczące migracji

Ta zmiana zachowania wprowadzona na platformie .NET 10 została zaprojektowana tak, aby nie przerywała działania istniejących aplikacji:

  • Aplikacje internetowe: kontynuuj pracę tak jak poprzednio z przekierowaniami strony logowania
  • Aplikacje mieszane: punkty końcowe interfejsu API uzyskują odpowiednie kody stanu, podczas gdy strony internetowe uzyskują przekierowania
  • Aplikacje tylko interfejsu API: skorzystaj z odpowiednich kodów stanu HTTP bez dodatkowej konfiguracji

Testowanie punktów końcowych interfejsu API

Po uaktualnieniu do wersji ASP.NET Core 10 sprawdź, czy punkty końcowe interfejsu API zwracają odpowiednie kody stanu:

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