Condividi tramite


Comportamento di autenticazione dell'endpoint API in ASP.NET Core

Quando si usa cookie l'autenticazione, gli endpoint API restituiscono i codici di stato HTTP appropriati (ad esempio 401 o 403) per gli errori di autenticazione anziché reindirizzare le richieste non autenticate alle pagine di accesso. Questo comportamento, più adatto per l'accesso all'API a livello di codice, è stato introdotto in ASP.NET Core in .NET 10.

Come ASP.NET Core identifica gli endpoint API

ASP.NET Core applica automaticamente questo comportamento agli endpoint riconosciuti come correlati all'API, tra cui:

  • Controller decorati con l'attributo [ApiController]
  • Endpoint API minimi registrati con MapGet, MapPost, MapPut, MapDeletee così via.
  • Endpoint che richiedono in modo esplicito risposte JSON
  • SignalR hub ed endpoint

Comportamento predefinito e personalizzazione

Per impostazione predefinita, ASP.NET Core applica cookie la logica di autenticazione in base al tipo di endpoint:

  • Pagine Web: reindirizzare alle pagine di accesso
  • Endpoint API: restituisce codici di stato 401 o 403 senza reindirizzamenti

Configurazione del comportamento

Anche se il comportamento predefinito funziona per la maggior parte degli scenari, può essere personalizzato se necessario:

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

Se è necessario eseguire l'override del rilevamento automatico per endpoint specifici, usare l'attributo [Authorize] con schemi di autenticazione specifici o implementare gestori di autenticazione personalizzati.

Considerazioni sulla migrazione

Questa modifica di comportamento introdotta in .NET 10 è progettata per essere non di rilievo per le applicazioni esistenti:

  • Applicazioni Web: continuare a funzionare come prima con i reindirizzamenti della pagina di accesso
  • Applicazioni miste: gli endpoint API ottengono codici di stato appropriati mentre le pagine Web ottengono reindirizzamenti
  • Applicazioni solo API: trarre vantaggio dai codici di stato HTTP appropriati senza configurazione aggiuntiva

Test degli endpoint API

Dopo l'aggiornamento a ASP.NET Core 10, verificare che gli endpoint API restituisca i codici di stato appropriati:

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