Autenticación en API .NET Core con Json Web Token

Json Web Token es un estándar de seguridad para peticiones HTTP incluido en el documento RFC 7519, en el cual se define un mecanismo para poder propagar entre dos partes de forma segura la identidad de un usuario indicando diferentes valores asociados a él. La información está codificada en un objeto JSON que se introduce en el cuerpo del mensaje HTTP que se envía.

Si queremos conocer todos los detalles, características y funcionamiento, podemos hacerlo visitando jwt.io donde encontraremos ejemplos, utilidades y librerías para diferentes lenguajes de programación que nos ayudaran a implementar JWT en nuestra aplicación.

 

¿Por qué utilizar Json Web Token?

Actualmente las aplicaciones están alojadas en diferentes dominios y servidores o incluso en teléfonos inteligentes como en el caso de las aplicaciones móviles. Para poder enviar y recibir información entre sí de forma rápida, segura y estándar, se utilizan servicios REST que trabajan sobre el protocolo HTTP y carecen de estado.

Para poder autenticar un usuario o aplicación, este envía una petición a una dirección URL específica informando de todos los datos necesarios para ello (normalmente usuario y contraseña). El API recibe esa información y valida si los datos son correctos. En caso de que la validación sea exitosa, genera un token y lo devuelve al solicitante para que este lo guarde y posteriormente lo envíe en cada una de sus peticiones.

 

Configurando JWT en nuestro API .NET Core

Para comenzar a utilizar la autenticación basada en Json Web Token en nuestro API .NET Core, tenemos que instalar el paquete NuGet Microsoft.AspNetCore.Authentication.JwtBearer en nuestro proyecto y añadir el middleware y su configuración en el el fichero Startup.cs.

Como se aprecia en la entrada anterior, también se ha registrado un servicio llamado JwtAuthenticationService que es el encargado de verificar las credenciales y generar el token que se devolverá al cliente.

Por último hay que añadir el decorador [Authorize] en los controladores donde se requiera autorización para poder acceder. Si algún método necesita ser llamado sin autenticación, como por ejemplo Authenticate (que es el método del API llamado para obtener el token) hay que decorarlo con [AllowAnonymous].

 

Consumiendo el API mediante JWT desde .NET Core MVC

Para consumir el API desde un proyecto .NET Core MVC no debemos instalar ningún paquete NuGet ni añadir ninguna dependencia adicional, simplemente se debe llamar al método Authenticate con los datos necesarios para obtener el token, y una vez que lo recibimos, enviarlo en la Authorization de todas las llamadas que realicemos.

A continuación muestro el código de ejemplo que he implementado para esta prueba de concepto:

 

Conclusión

Utilizar este tipo de autenticación en nuestras APIs nos abre un amplio abanico de posibilidades a la hora de consumirla desde cualquier parte. Es utilizada en apps, webs e incluso servicios de integración de datos. 

Implementar JWT con .NET Core es relativamente sencillo por lo que no hay que perder la oportunidad de probarlo en tu siguiente proyecto. 

En este repositorio de GitHub se puede encontrar el código fuente de la prueba de concepto (API + Web) así como un pequeño proyecto Postman para poder probar el API de una forma mucho más rápida y sencilla.

 

 

Si queréis poneros en contacto con nosotros, podéis hacerlo en info@kabel.es
También podéis seguirnos en TwitterLinkedInFacebook

 

Licencia de Creative Commons

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internación 

Deja un comentario

18 − dos =