Conecta

Generic selectors
Exact matches only
Search in title
Search in content
Search in posts
Search in pages
Sé parte Contacto

Construyendo una Web API REST segura con JSON Web Token en .NET – 1ª Parte

13/10/21

JWT (JSON Web Token) es un estándar RFC 7519 y se encarga de transmitir información con la identidad y claims de un usuario de forma segura entre dos partes: cliente - servidor. Esta información transmitida es totalmente verificada, ya que está firmada digitalmente.
Tiempo de lectura: 3 minutos

La ventaja fundamental de este modelo de seguridad es que, en lugar de almacenar información relacionada con la autorización vinculada a cada usuario en sesión del servidor, se almacena una sola clave de firma en el servidor que sirve para crear los Tokens. 

 

¿Qué son las APIS? 

 

Las APIS son conjuntos de protocolos que se usan para crear e integrar el software de las aplicaciones. Permiten interactuar con un sistema para obtener datos y ejecutar una función. 

 

¿Qué es un JSON Web Token? 

 

JWT (JSON Web Token) es un estándar RFC 7519 y se encarga de transmitir información con la identidad y claims de un usuario de forma segura entre dos partes: cliente – servidor. Esta información transmitida es totalmente verificada, ya que está firmada digitalmente.   

 

De forma sencilla, un JWT es una cadena de texto que tiene 3 partes codificadas en Base64, separadas por un punto (header.payload.firma) que generamos y entregamos a los clientes de nuestra API. 

Podemos utilizar el JWT Debugger.para decodificar ese token y visualizar su contenido. Si accedemos al mismo y pegamos dentro el texto completo, se nos mostrará lo que contiene.

 

Al copiar y pegar el token en su formulario, podremos ver el JSON decodificado, totalmente seguro ya que se indicará Signature Verified 

Interfaz de usuario gráfica, Texto, Aplicación Descripción generada automáticamente 

Para más información técnica, puedes consultar aquí: https://jwt.io/introduction 

 

La firma 

La información puede ser verificada y confiable porque está firmada digitalmente, con un secret-key 

La firma nos va a poder verificar que el remitente es quien dice ser, y que el mensaje no se ha modificado por el camino. 

 

Si, por ejemplo, alguien modifica el token la firma no se validará y sabremos que ese alguien ha introducido un dato malicioso.  

Veamos el ejemplo en el JWT Debugger cambiando ”secret“ por ”otro-secret“ en el editor y pasará lo que se muestra en la imagen. 

Interfaz de usuario gráfica, Texto, Sitio web Descripción generada automáticamente 

En este caso, al cambiar el “secret-key“, vemos que la firma no es válida Invalid Signature. Esto quiere decir que no podemos confiar en el Token JWT 

 

Garantía de seguridad: encriptar las peticiones con un certificado y usar siempre HTTPS  

 

Si enviamos información sensible o comprometida estamos expuestos, ya que quedaría visible. Por ello, es necesario cifrar todo aquello que no queramos que sea visible a través de HTTPS para encriptar todo el tráfico entre los clientes y servidor con un certificado. 

Ciclo de vida de un Token JWT 

 

Pasos en el proceso de JWT: 

  • El usuario de una aplicación hace login con sus credenciales en el servidor donde esta publicada el API. 

  • El usuario es validado en el servidor y se crea un nuevo Token JWT (usando nuestro “secret-key“) para entregárselo al usuario. 

  • El servidor devuelve el JWT firmado que contiene los claims referentes al usuario y caducidad del Token. 

  • El cliente almacena el JWT para su uso y lo envía en cada petición mediante “AuthorizationBearer“. 

  • El servidor verifica la firma del Token, su caducidad y comprueba si el usuario tiene permisos al recurso leyendo los datos del payload.  

  • El servidor responde al cliente la petición una vez que ha confirmado el Token y que los permisos del usuario son correctos. 

Comentarios sobre el ciclo de vida del JWT: 

  • AuthorizationBearer“: indica que existen otras técnicas para hacerlo. 

  • JWT es muy ligero: podemos codificar gran cantidad de datos sensibles en el payload y pasarlo como una cadena. 

  • Creamos servicios de autenticación optimizados desacoplados del servidor y tenemos protección contra ataques CSRF. 

  • Ayuda a evitar mantener el estado del usuario en el servidor y lo delegamos al cliente. 

  • Importante siempre usar HTTPS entre el cliente/servidor para las peticiones. 

  • Nos permite olvidarnos de cookies 

Compartir