7 minutos de lectura
0
JWT (JSON Web Token) es una forma segura y eficiente de transmitir información entre diferentes sistemas en forma de objetos JSON. En el contexto de las API web, JWT se utiliza a menudo como un mecanismo de autenticación y autorización, permitiendo a los usuarios autenticarse en una aplicación web y luego autorizar las solicitudes de la API en función de su nivel de acceso.
En este artículo, te enseñaré cómo implementar JWT en una aplicación Web API utilizando ASP.NET Core 6. Con la autenticación JWT, podemos asegurar una Web API siguiendo estos pasos:
Para comenzar, abre Visual Studio 2022 e inicia un nuevo proyecto. Haz clic en "Crear nuevo proyecto" y selecciona "ASP.NET Core Web API".
A continuación, especifica el nombre y la ubicación del nuevo proyecto en la ventana "Configura tu nuevo proyecto" y haz clic en "Siguiente". Luego en la ventana de "Información adicional" deja todo predeterminado y haz clic en "Crear".
Para habilitar la autenticación JWT, necesitamos instalar el paquete
Microsoft.AspNetCore.Authentication.JwtBearer
en nuestro proyecto.
Puedes hacer esto seleccionando Tools > NuGet Package Manager > Manage NuGet Packages for Solutions.
en Visual Studio y buscando el paquete Microsoft.AspNetCore.Authentication.JwtBearer
e instálelo.
También puedes instalar el paquete desde la consola de NuGet o .NET CLI ejecutando el siguiente comando:
A continuación, debemos crear una sección en el archivo appsettings.json
para la información del emisor, la audiencia y la clave secreta que se utilizará
para crear un JSON Web Token.
Agrega la siguiente información en el archivo appsettings.json
:
Asegúrate de definir una clave secreta y mantenerla en un lugar seguro.
Para configurar la autenticación JWT en el momento en que se inicia la aplicación,
se utiliza el método AddAuthenication
en el archivo Program.cs
.
Este método especifica el esquema de autenticación como JwtBearer
y configura los
parámetros del token mediante la llamada al método AddJwtBearer
.
Los valores de Emisor, Audiencia y Clave se leen del archivo de configuración appsettings.json
.
Para validar la información del emisor, la audiencia, la clave y la vida útil,
se utiliza la instancia de TokenValidationParameters
.
Para configurar la autenticación JWT en su aplicación, agregue el
siguiente código en el archivo Program.cs
:
Esto configurará la autenticación JWT en su aplicación ASP.NET Core 6, habilitará la capacidad de autorización y agregará la capacidad de autenticación y autorización en la aplicación.
Para almacenar las credenciales del inicio de sesión,
debe crear una clase User.cs
en la carpeta Entities
.
Con esta clase, podrá almacenar y validar las credenciales del usuario en su aplicación ASP.NET Core 6.
Para probar el funcionamiento de nuestra aplicación, vamos a crear los siguientes controladores:
El AuthController se encargará de crear y retornar el JWT:
A continuación, creamos un controlador llamado PublicController con el siguiente contenido:
Este es un controlador simple que no necesita autorización para acceder. Aquí se pueden presentar algunos endpoints públicos que no necesitan autenticación previa.
Finalmente, creamos un controlador llamado PrivateController
con el siguiente contenido:
Como se puede observar, la única diferencia con el controlador público es que en nuestro controlador
privado le hemos agregado una etiqueta [Authorize]
, la cual indica que el recurso controlado
por el controlador está protegido y solo es accesible para usuarios autenticados y autorizados.
Si intentamos acceder al recurso sin enviar el token en la cabecera, recibiremos un status code 401 como se muestra en la imagen:
Para poder acceder al contenido protegido, necesitamos enviar el token en la cabecera de la solicitud como se muestra en la imagen:
Ahora bien, si necesitamos obtener los datos del usuario autenticado,
podemos agregar las siguientes modificaciones en nuestro PrivateController.cs
:
Como se puede observar, hemos declarado la variable username
y la utilizamos para buscar el nombre del usuario autenticado.
De la misma forma, podemos obtener el id
, recordando que en la creación del JWT,
agregamos está información.
La librería Microsoft.AspNetCore.Authentication.JwtBearer
es la encargada de realizar
la decodificación y validación del token de forma automática.
Esta librería está diseñada para manejar la mayoría de los casos comunes de autenticación JWT
y tiene una gran cantidad de características de seguridad integradas.
Finalmente, si enviamos la solicitud correctamente, recibiremos una respuesta como se muestra en la imagen:
En este tutorial aprendimos cómo agregar autenticación JWT a una API RESTful construida con ASP.NET Core 6. Comenzamos configurando nuestra aplicación ASP.NET Core 6 para utilizar el esquema de autenticación JWT. Luego, generamos tokens JWT utilizando un método personalizado, y utilizamos estos tokens para proteger los endpoints de nuestra API.
También aprendimos cómo decodificar y validar un token JWT utilizando la librería Microsoft.AspNetCore.Authentication.JwtBearer
.
Finalmente, demostramos cómo podemos obtener los datos del usuario autenticado desde el token.
La autenticación JWT es una excelente opción para proteger una API RESTful, ya que los tokens son autocontenidos y no requieren almacenamiento en el servidor. Además, los tokens pueden ser enviados en la cabecera de una solicitud HTTP, lo que los hace fáciles de integrar con otros sistemas.
Espero que este tutorial haya sido útil para ti y te haya brindado una buena introducción a la autenticación JWT en ASP.NET Core 6. Si tienes alguna pregunta o comentario, no dudes en dejarlos a continuación. ¡Gracias por leer!
Si lo deseas, puedes apoyarme con una donación voluntaria. Tu aporte me permite dedicar más tiempo a investigar, escribir y mejorar la calidad del contenido que publico. ¡Muchísimas gracias por considerar impulsar este proyecto!
Compartir en: