Compartir a través de


Comportamiento de autenticación de punto de conexión de API en ASP.NET Core

Al usar cookie la autenticación, los puntos de conexión de API devuelven los códigos de estado HTTP adecuados (como 401 o 403) para errores de autenticación en lugar de redirigir las solicitudes no autenticadas a las páginas de inicio de sesión. Este comportamiento, que es más adecuado para el acceso a la API mediante programación, se introdujo en ASP.NET Core en .NET 10.

Cómo ASP.NET Core identifica los puntos de conexión de API

ASP.NET Core aplica automáticamente este comportamiento a los puntos de conexión que reconoce como relacionados con la API, entre los que se incluyen:

  • Controladores decorados con el [ApiController] atributo
  • Puntos de conexión de API mínimos registrados con MapGet, MapPost, MapPut, MapDelete, , etc.
  • Puntos de conexión que solicitan explícitamente respuestas JSON
  • SignalR hubs y puntos de conexión

Comportamiento y personalización predeterminados

De forma predeterminada, ASP.NET Core aplica cookie lógica de autenticación basada en el tipo de punto de conexión:

  • Páginas web: redireccionamiento a páginas de inicio de sesión
  • Puntos de conexión de API: devuelve códigos de estado 401 o 403 sin redirecciones

Configuración del comportamiento

Aunque el comportamiento predeterminado funciona para la mayoría de los escenarios, se puede personalizar si es necesario:

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

Si necesita invalidar la detección automática de puntos de conexión específicos, use el [Authorize] atributo con esquemas de autenticación específicos o implemente controladores de autenticación personalizados.

Consideraciones sobre la migración

Este cambio de comportamiento introducido en .NET 10 está diseñado para no interrumpirse para las aplicaciones existentes:

  • Aplicaciones web: continúe funcionando como antes con redirecciones de la página de inicio de sesión
  • Aplicaciones mixtas: los puntos de conexión de API obtienen códigos de estado adecuados mientras las páginas web obtienen redirecciones.
  • Aplicaciones solo de API: beneficiarse de códigos de estado HTTP adecuados sin configuración adicional

Prueba de los puntos de conexión de API

Después de actualizar a ASP.NET Core 10, compruebe que los puntos de conexión de API devuelven los códigos de estado adecuados:

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