Token web JSON | JWT

Un token web JSON (JWT) es un objeto JSON que se utiliza para transferir información de forma segura a través de la web (entre dos partes). Se puede usar para un sistema de autenticación y también para el intercambio de información. El token se compone principalmente de encabezado, carga útil y firma . Estas tres partes están separadas por puntos (.). JWT define la estructura de la información que enviamos de una parte a la otra, y se presenta en dos formas: serializada, deserializada . El enfoque serializado se utiliza principalmente para transferir los datos a través de la red con cada solicitud y respuesta. Mientras que el enfoque deserializado se usa para leer y escribir datos en el token web.

deserializado

JWT en el formulario deserializado contiene solo el encabezado y la carga útil. Ambos son objetos JSON simples.

Encabezamiento

Un encabezado en un JWT se usa principalmente para describir las operaciones criptográficas aplicadas al JWT, como la técnica de firma/descifrado que se usa en él. También puede contener datos sobre el tipo de medio/contenido de la información que enviamos. Esta información está presente como un objeto JSON y luego este objeto JSON se codifica en BASE64URL. Las operaciones criptográficas en el encabezado definen si el JWT está firmado/sin firmar o encriptado y, por lo tanto, qué técnicas de algoritmo usar. Un encabezado simple de un JWT se parece al siguiente código:

 {
    "typ":"JWT",
    "alg":"HS256"
 }

‘alg’ y ‘typ’ son claves de objeto que tienen diferentes valores y diferentes funciones, como ‘typ’ nos da el tipo de encabezado que es este paquete de información, mientras que ‘alg’ nos informa sobre el algoritmo de cifrado utilizado.
Nota: HS256 y RS256 son los dos algoritmos principales que utilizamos en la sección de encabezado de un JWT.
Algunos JWT también se pueden crear sin firma ni cifrado. Dicho token se denomina no seguro y su encabezado debe tener el valor de la clave de objeto alg asignado como ‘ninguno’.

 {
    "alg":"none"
 }

Carga útil

La carga útil es la parte del JWT donde realmente se agregan todos los datos del usuario. Estos datos también se conocen como las ‘reclamos’ del JWT. Cualquier persona puede leer esta información, por lo que siempre se recomienda no incluir información confidencial aquí. Esta parte generalmente contiene información del usuario. Esta información está presente como un objeto JSON, luego este objeto JSON se codifica en BASE64URL. Podemos poner tantos reclamos como queramos dentro de una carga útil, aunque a diferencia del encabezado, ningún reclamo es obligatorio en una carga útil. El JWT con la carga útil se verá así:

 {
     "userId":"b07f85be-45da",
     "iss": "https://provider.domain.com/",
     "sub": "auth/some-hash-here",
     "exp": 153452683
 }

El JWT anterior contiene ID de usuario, iss, sub y exp . Todos estos juegan un papel diferente, ya que userId es la identificación del usuario que estamos almacenando, ‘iss’ nos informa sobre el emisor, ‘sub’ significa asunto y ‘exp’ significa fecha de vencimiento.

serializado

JWT en forma serializada representa una string con el siguiente formato:

[header].[payload].[signature]

todos estos tres componentes componen el JWT serializado. Ya sabemos qué son el encabezado y el payload y para qué se utilizan. Hablemos de la firma.

Firma

Esta es la tercera parte de JWT y se utiliza para verificar la autenticidad del token. El encabezado y la carga útil codificados en BASE64URL se unen con un punto (.) y luego se codifica mediante el algoritmo de cifrado definido en un encabezado con una clave secreta. Luego, esta firma se agrega al encabezado y la carga útil usando un punto (.) que forma nuestro token real header.payload.signature

Sintaxis:

HASHINGALGO(base64UrlEncode(encabezado) + “.” + base64UrlEncode(carga útil),secreto)

Entonces, todos estos componentes anteriores juntos son lo que constituye un JWT. Ahora veamos cómo se verá nuestro token real:

Ejemplo de JWT:

header:

{
  "alg" : "HS256",

  "typ" : "JWT"
}

Payload:

{
  "id" : 123456789,

  "name" : "Joseph"
}

Secret: GeeksForGeeks

Token web JSON

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTIzNDU2Nzg5LCJuYW1lIjoiSm9zZXBoIn0.OpOSSw7e485LOP5PrzScxHb7SR6sAOMRckfFwi4rp7o

Publicación traducida automáticamente

Artículo escrito por aman neekhara y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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