Resumen

La autenticación básica en APIs es el primer filtro de seguridad que puedes añadir a un proyecto en .NET cuando necesitas controlar el acceso con usuario y contraseña. Aquí verás cómo crear un middleware que valide credenciales en base64, integrarlo al pipeline y mostrarlo en Swagger para probarlo sin fricción.

¿Qué mecanismos de autenticación existen para APIs?

No toda aplicación necesita el mismo nivel de protección, así que conviene conocer las opciones antes de elegir.

Entre los mecanismos más usados están:

  • JSON Web Token (JWT): estándar abierto, ideal cuando manejas sesiones distribuidas.
  • Microsoft Entra y OAuth 2: pensados para entornos empresariales y delegación de identidad.
  • AWS Cognito: servicio gestionado en la nube para autenticación robusta.
  • Basic Auth: usuario y contraseña codificados en base64, útil para demos o entornos internos.

¿Cuándo debo usar Basic Auth? Solo en pruebas, demos o entornos cerrados. No es recomendable en producción porque las credenciales viajan codificadas, no encriptadas.

¿Cómo se crea un middleware de autenticación básica en .NET?

El concepto de middleware es clave: cada componente del pipeline decide si continúa la ejecución o corta la petición [01:00]. Para este caso, creas una clase llamada BasicAuthMiddleware.cs que recibe el RequestDelegate next y expone un método InvokeAsync con la lógica de validación [01:30].

¿Qué hace el método InvokeAsync?

Dentro del InvokeAsync ocurre el corazón del proceso:

  1. Hace skip de las rutas de Swagger, Scalar y OpenAPI para que la documentación siga siendo accesible [02:00].
  2. Lee el encabezado Authorization del request.
  3. Decodifica las credenciales y compara usuario y contraseña.
  4. Si coinciden, ejecuta next y deja avanzar la petición; si no, devuelve un 401 Unauthorized, que es la respuesta estándar del patrón REST cuando alguien no está autorizado [02:50].

Las credenciales del demo se definen como dos variables: usuario Platzi y contraseña 12345. Esto puede mejorarse moviéndolas al appsettings.json y, si quieres más capas, encriptando la contraseña dentro del archivo.

¿Dónde se registra el middleware en Program.cs?

El orden importa. La autenticación siempre va antes que la autorización dentro del pipeline. Por eso, en Program.cs se invoca el método de extensión UseBasicAuth() antes de cualquier UseAuthorization. Esa extensión es la que permite escribir el middleware de forma limpia, sin acoplar la lógica al archivo principal.

¿Cómo probar la autenticación con Swagger y Postman?

Una vez registrado el middleware, al ejecutar la aplicación y entrar a Swagger con Try it out, la API responde 401 error. Eso confirma que el filtro está activo.

En Postman la prueba es directa: en la pestaña Authorization eliges el tipo Basic Auth, ingresas usuario Platzi y contraseña 12345, y el endpoint devuelve la respuesta esperada [04:30].

¿Por qué Swagger devuelve 401 aunque ingrese credenciales? Porque por defecto Swagger no adjunta el encabezado Authorization. Necesitas configurar el esquema de seguridad en OpenAPI para que lo incluya en cada request.

¿Cómo habilitar el botón Authorize en Swagger?

Dentro de la configuración de AddSwaggerGen agregas un esquema de seguridad de tipo Basic, junto con una descripción que indique cómo ingresar usuario y contraseña. También debes agregarlo como requirement, porque sin esa parte Swagger muestra el campo, pero no adjunta el encabezado al lanzar la petición.

Con esos cambios aparece el botón Authorize en la interfaz. Al pulsarlo, ingresas Platzi y 12345, y a partir de ahí cualquier endpoint responde correctamente.

Para Scalar el flujo es similar: revisa los recursos del curso, ajusta el middleware y, si quieres comodidad, deja precargado el usuario y la contraseña por defecto.

¿Qué retos quedan después de implementar Basic Auth?

Una vez funcionando la autenticación básica, hay tres tareas para dejarla más profesional:

  • Verificar que todos los endpoints devuelven 401 cuando no se envían credenciales, sin importar si pruebas con Swagger, Scalar o Postman.
  • Mover usuario y contraseña al archivo appsettings.json, en lugar de quemarlos dentro del código.
  • Migrar a un esquema más seguro cuando vayas a producción: JWT, OAuth 2, Identity, Microsoft Entra o Cognito.

El middleware que construiste es la base. A partir de ahí puedes intercambiar la lógica de validación por cualquier mecanismo más robusto sin tocar el resto del pipeline. Cuéntame en los comentarios qué método de autenticación vas a probar primero en tu próxima API.

      Autenticación básica en APIs con middleware .NET