Basic Auth middleware en ASP.NET Core

Luego de trabajar mucho en ASP.NET Core en los últimos meses me he cruzado con algunos casos particulares que no están contemplados de forma nativa. El caso de Basic Auth es interesante porque fue dejado de lado a propósito dado que se trata de un esquema un tanto inseguro para ser implementado en entornos productivos, pero la verdad es que tanto en casos de pruebas como en aplicaciones simples sigue siendo una opción válida.

ASP.NET Core expone el pipeline de ejecución de forma tal que podemos agregar lo que se denomina como Middlewares (un concepto parecido a HTTP Modules)Middlewares y que permiten definir lógicas por las cuales “pasan” los requests y podemos optar por continuar o no con la ejecución del request a través del pipeline.

Un ejemplo notorio de Middleware es MVC propiamente dicho, actualmente como un paquete opcional, a fin de incluirlo en nuestras aplicaciones lo agregamos al pipeline con el conocido app.UseMvc(). Si vemos nuestro Startup.cs, particularmente la funcion Configure, podríamos tener algo básico como:

Lo cuál implica que cada request primero es manejado por el Middleware de Static Files (para detectar si se está pidiendo un archivo estático) y si no, pasa a continuar su ejecución por el Middleware de MVC, en conclusión, el orden de llamado de los Middleware define el orden de ejecución en el pipeline.

Yendo al caso de Basic Auth, podemos definir un Middleware de la siguiente manera:

Como verán, leemos los encabezados, desencriptamos y comparamos contra algún valor fijo u obtenido de algún repositorio. En caso de que no haya encabezado Authorization o la información enviada no corresponda, devolvemos el código de estado HTTP 401.

Para implementar este Middleware, basta con agregarlo al pipeline:

Noten que lo puse después de UseStaticFiles, de esta manera, no es necesario enviar el header para servir archivos estáticos, pero sí para poder acceder a cualquier Action o Controller de MVC.

Material relacionado


Originally published at Twisting code.

A single golf clap? Or a long standing ovation?

By clapping more or less, you can signal to us which stories really stand out.