Welcome to Our Website

JSON Web Token (JWT) explicado

JSON Web Token es un estándar utilizado para crear tokens de acceso para una aplicación.

funciona de esta manera: el servidor genera un token que certifica la identidad del usuario y lo envía al cliente.

el cliente enviará el token de vuelta al servidor para cada solicitud posterior, por lo que el servidor sabe que la solicitud proviene de una identidad en particular.

esta arquitectura demuestra ser muy efectiva en las aplicaciones web modernas, donde después de que el Usuario se autentica realizamos solicitudes de API ya sea a una API REST o a una API GraphQL.

¿Quién usa JWT?, Google, por ejemplo. Si utiliza las API de Google, utilizará JWT.

un JWT está firmado criptográficamente (pero no cifrado, por lo que el uso de HTTPS es obligatorio al almacenar datos de usuario en el JWT), por lo que hay una garantía de que podemos confiar en él cuando lo recibamos, ya que ningún intermediario puede interceptarlo y modificarlo, o los datos que posee, sin invalidarlo.

dicho esto, los JWT a menudo son criticados por su uso excesivo, y especialmente por su uso cuando se pueden usar soluciones menos problemáticas.

necesitas formar tu opinión sobre el tema., No estoy abogando por una tecnología sobre otra, solo presentando todas las oportunidades y herramientas que tienes a tu disposición.

¿para qué sirven? Principalmente autenticación API y autorización de servidor a servidor.

¿cómo se genera un token JWT?

Usando Node.,js puede generar la primera parte del token utilizando este código:

const header = { "alg": "HS256", "typ": "JWT" }const encodedHeader = Buffer.from(JSON.stringify(header)).toString('base64')

configuramos el algoritmo de firma para que sea HMAC SHA256 (JWT admite múltiples algoritmos), luego creamos un búfer a partir de este JSON-objeto codificado, y lo codificamos usando Base64.

El resultado parcial es eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.

a continuación añadimos el payload, que podemos personalizar con cualquier tipo de datos., Hay claves reservadas, incluyendo iss y exp que identifican el emisor y el tiempo de caducidad del token.

Usted puede agregar sus propios datos a la entidad por el uso de un objeto:

const payload = { username: 'Flavio' }

convertir este objeto, JSON-codificado, a un Búfer y valoramos el resultado usando base64, como hicimos antes:

const encodedPayload = Buffer.from(JSON.stringify(payload)).toString('base64')

En este caso el resultado parcial es eyJ1c2VybmFtZSI6IkZsYXZpbyJ9.,

a continuación, obtenemos una firma del encabezado y el contenido de la carga útil, lo que garantiza que nuestro contenido no se pueda cambiar incluso si se intercepta, ya que nuestra firma se invalidará. Para ello, usaremos el módulo de Nodo crypto:

utilizamos la clave secreta secretKey y creamos una representación codificada en base64 de la firma cifrada.,

el valor de la firma en nuestro caso es

MQWECYWUT7bayj8miVgsj8KdYI3ZRVS+WRRZjfZrGrw=

casi hemos terminado, solo tenemos que concatenar las 3 partes de header, payload y signature separándolas con un punto:

const jwt = `${encodedHeader}.${encodedPayload}.${signature}`

autenticación API

Esta es probablemente la única forma sensata de usar JWT.

un escenario común es: te registras en un servicio y descargas un JWT desde el panel de servicio. Esto es lo que usará a partir de ahora para autenticar todas sus solicitudes al servidor.,

otro caso de uso, que es lo contrario, es enviar el JWT cuando administra la API y los clientes se conectan a usted, y desea que sus usuarios envíen solicitudes posteriores simplemente pasando el token.

en este caso, el cliente necesita almacenar el token en algún lugar. ¿DÓNDE ESTÁ el mejor lugar? En una cookie HttpOnly. Los otros métodos son todos propensos a ataques XSS y, como tales, deben evitarse. Una cookie HttpOnly no es accesible desde JavaScript, y se envía automáticamente al servidor de origen en cada solicitud, por lo que se adapta perfectamente al caso de uso.,

elija la mejor biblioteca JWT

dependiendo del idioma y el entorno que utilice, puede elegir entre varias bibliotecas. Los más populares se enumeran en el jwt.io sitio web.

no use JWTs como tokens de sesión

no debe usar JWTs para sesiones. Utilice un mecanismo de sesión regular del lado del servidor, ya que es mucho más eficiente y menos propenso a la exposición de datos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *