La autenticación es la primera barrera de seguridad en una API. Aquí verás cómo activar autenticación básica con usuario y contraseña codificados en Base64 usando un middleware en .NET, cómo evitar errores 401 al probar con Swagger y Postman, y qué ajustes aplicar en OpenAPI para enviar credenciales desde la documentación. Todo con un enfoque práctico y directo.
¿Cómo implementar autenticación básica con middleware en .NET?
La idea central es crear una clase llamada BasicAuthMiddleware.cs que intercepte cada request, valide el encabezado de autorización y, si las credenciales son correctas, permita continuar con el siguiente componente del pipeline.
El middleware controla el acceso a los endpoints mediante usuario y contraseña en Base64.
Se excluyen rutas de documentación como Swagger, Scalar y OpenAPI para poder usar la interfaz de pruebas.
Si faltan credenciales o no coinciden, se responde con 401 (Unauthorized) según el patrón REST.
Mejora sugerida: mover usuario y contraseña a appsettings y considerar cifrado, en lugar de “quemarlas” en el código.
¿Qué hace la clase BasicAuthMiddleware.cs?
La clase define dos valores para usuario y contraseña, recibe el request delegate (el next) y, en su InvokeAsync, ejecuta la lógica de autenticación. Si pasa, llama al siguiente middleware; si no, devuelve 401.
La autenticación debe ejecutarse antes de la autorización. Se registra el middleware con el método de extensión para asegurar el orden correcto.
// Program.cs (fragmento ilustrativo)var app = builder.Build();// Primero autenticaciónapp.UseBasicAuth();// Luego autorización si aplica// app.UseAuthorization();app.Run();
¿Cómo probar con Swagger y Postman sin errores 401?
Inicialmente, al usar el botón Try it out en Swagger, verás 401 porque la UI no envía credenciales. En Postman, selecciona Basic Auth en Authorization, ingresa el usuario y la contraseña, y la API responde correctamente. En el ejemplo, se usaron credenciales “Plaxy” y “12345” para validar que la autenticación funciona.
En Postman, usa Basic Auth y envía usuario y contraseña.
En Swagger, habilita el botón Authorize añadiendo el esquema de seguridad basic en OpenAPI.
Marca el esquema como requirement para que el encabezado Authorization se incluya en los requests.
¿Cómo habilitar Basic Auth en Swagger con OpenAPI?
Se agrega una definición de seguridad tipo http con esquema "basic" y un requirement para que Swagger envíe el encabezado en cada request.
// Program.cs (configuración de Swagger/OpenAPI)builder.Services.AddSwaggerGen(c =>{ c.AddSecurityDefinition("basic",newOpenApiSecurityScheme{ Name ="Authorization", Type = SecuritySchemeType.Http, Scheme ="basic", In = ParameterLocation.Header, Description ="Usuario y contraseña con *Basic Auth*."}); c.AddSecurityRequirement(newOpenApiSecurityRequirement{{newOpenApiSecurityScheme{ Reference =newOpenApiReference{ Type = ReferenceType.SecurityScheme, Id ="basic"}}, Array.Empty<string>()}});});
¿Qué buenas prácticas y siguientes pasos recomienda el instructor?
Aunque este enfoque brinda un mínimo de seguridad, no es recomendado para producción.
Para producción, usar JSON Web Token, OAuth2, Identity, Microsoft Entra o Cognito.
Centralizar credenciales en appsettings y evaluar cifrado en reposo.
Verificar que todos los endpoints devuelvan 401 si no se envían credenciales, ya sea desde Scalar, Swagger o Postman.
Añadir soporte similar en Scalar y, si se desea, precargar usuario y contraseña para agilizar pruebas.
Mantener el orden: autenticación antes de autorización en el pipeline.
¿Te quedó alguna duda o quieres compartir tu implementación con Basic Auth y Swagger? Comenta tus preguntas y hallazgos para seguir mejorando juntos.