Autenticación JWT

JSON Web Token (JWT) es un formato compacto de representación de reclamaciones pensado para entornos con limitaciones de espacio, como cabeceras de autorización HTTP y parámetros de consulta URI. Una reclamación se representa como un par nombre-valor que contiene un nombre de reclamación y un valor de reclamación.

Las reclamaciones en un JWT se codifican como un objeto JSON que se utiliza como carga útil de una estructura JWS (JSON Web Signature) o como texto sin formato de una estructura JWE (JSON Web Encryption). Las reclamaciones JWT se pueden firmar digitalmente o proteger la integridad con un Código de autenticación de mensajes (MAC) y también se pueden cifrar.

Visión general de JWT

JWT representa un conjunto de reclamaciones como un objeto JSON codificado en una estructura JWS o JWE. Este objeto JSON es el conjunto de reclamaciones JWT. El objeto JSON consta de cero o más pares de nombre-valor (o miembros), donde los nombres son series y los valores son valores JSON arbitrarios. Estos miembros son las reclamaciones representadas por el JWT. Los nombres de miembro dentro del conjunto de reclamaciones JWT se conocen como nombres de reclamación. Los valores correspondientes se conocen como valores de reclamación.

Un JWT se representa como una secuencia de partes URL separadas por caracteres de punto ('.'). Cada parte contiene un valor base64url-encoded. El número de partes en el JWT depende de la representación del JWS resultante utilizando la serialización compacta de JWS o JWE utilizando la serialización compacta de JWE.

Tipos de JWT

JWT es principalmente de los dos tipos siguientes:
  • Firma web JSON (JWS) -El contenido de este tipo de JWT se firma digitalmente para asegurarse de que el contenido de la JWT no se altere en tránsito entre el remitente y el destinatario. El contenido o las reclamaciones del JWS pueden ser leibles también por otras partes. Por lo tanto, se puede utilizar un JWS para verificar la integridad del contenido o reclamación, pero no se debe utilizar para transferir datos confidenciales como contraseñas. JWS se utiliza normalmente a través de HTTPS o SSL porque no impide intrínsecamente la lectura de los datos.
  • JSON Web Encryption (JWE) : el contenido de este tipo de JWT se cifra digitalmente. Esto significa que se puede utilizar para verificar la integridad y proteger el contenido. Puede utilizarse sobre HTTP plano, ya que encripta intrínsecamente el contenido.
Nota: Sterling™ Order Management System sólo admite JWS.

Ejemplo de JWT

The format of a typical JWS is <Base 64 URL codificado Encabezado json>.<Base 64 URK codificado Payload json>.<Firma codificada en base 64 URL >

La siguiente firma se obtiene firmando el contenido de la cabecera y la carga útil codificadas en URL Base 64 con una clave criptográfica mediante el algoritmo RS256.
Header 
{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "a1"
}

Payload
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true,
  "iat": 1516239022,
  "exp": 1531762065
}
La siguiente ilustración es la representación JWS de ejemplo de JWT firmado con la clave privada RS256 .
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImExIn0
.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMiwiZXhwIjoxNTMxNzYyMDY1fQ
.z4qfO0leZK2mYp_w-jFNidTx-Ri0PRMHLsOAG1Den7ZR4QntIJhU17U0afgoe5VzISXS6jW61ga3XEk39ey1G7a_-ARIVZLYN11fHDhsPuzN7PPkbT
5uWpHEUhVWRR8dxHqXmNiDaWjNhTnzHCBpfrRHj5pR_dzubbuE_uPuvDk

Tal como se ilustra en el ejemplo, el JWS tiene las partes siguientes y está separado por el signo "." .

  • Cabecera = eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImExIn0
  • Carga útil = G4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMiwiZXhwIjoxNTMxNzYyMDY1fQ
  • Firma = z4qfO0leZK2mYp_w-jFNidTx-Ri0PRMHLsOAG1Den7ZR4QntIJhU17U0afgoe5VzISXS6jW61ga3XEk39ey1G7a_-ARIVZLYN11fHDhsPuzN7PPkbT5uWpHEUhVWRR8dxHqXmNiDaWjNhTnzHCBpfrRHj5pR_dzubbuE_uPuvDk