JWT Validation

El JSON Web Token (JWT) es un estándar abierto (RFC 7519) que define una forma compacta y autosuficiente para la transmisión segura de información entre dos partes como un objeto JSON. La información se puede verificar y confiar porque hay firma digital.

Los JWT se pueden firmar usando un secreto (con el algoritmo HMAC) o un par de claves pública y privada usando RSA.

Para leer más sobre esto, vaya a https://jwt.io/.

Generar un token

Antes de realizar la llamada para generar el token JWT, debemos realizar una llamada para generar el Authorization Code. Puedes ver más sobre esto aquí.

Para usar el interceptor JWT, se debe crear una aplicación, por lo que tenemos acceso al client ID y client secret.

Para generar el JWT, debe realizar una operación POST para el endpoint <url>/oauth/access-token del gateway.

El header debe contener la siguiente información:

Authorization : Basic client_id:client_secret
Este client_id:client_secret debe ser tipo string convertido a Base64, utilizando los datos de la aplicación creada.

A continuación se muestra un ejemplo de header con client ID y secret convertidos a Base64:

Authorization : Basic ZjkyMTIxNzMtZTcwNS0zNzNiLWE2OTgtNjE5MjNlMzc4MzU5OjAyYWI1Mjg4LTkyZGItM2FiMy05OWZkLWZhYzRhZjg1N2Q4MQ==

En el cuerpo, debemos pasar el código generado por el endpoint de grant-code con algunos elementos más, en el formato x-www-form-urlencoded:

"grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer"
"code" : "8748d39f-1d4f-311f-92c6-4b279db1b317"

Por último, su token de acceso será generado de nuevo y debe aparecer como se muestra a continuación:

{
  "access_token": "ca81cb16-43e4-3e96-aaea-4861e7791dc7",
  "refresh_token": "677b881a-d0b6-3b29-b9a8-f0cdb50ce035",
  "token_type": "access_token",
  "expires_in": 3600
}

Flujo

Este interceptor solo se puede introducir en el flujo de peticiones (request) y contiene dos datos obligatorios: ubicación (location) y nombre (name).

Las opciones de ubicación son:

  • Query Param: valida la existencia de un JWT pasado a través de query param.

    • La propiedad "Name" define el nombre de query param esperado.
      jwt queryparam

  • Header: valida un JWT pasado en un header.

    • La propiedad "Name" define el nombre de header esperado.
      jwt header

  • Default JWT Header: valida un JWT pasado en un header.

    • Para esta opción, no hay ninguna propiedad "Name"; en este caso, el JWT se espera en el header Authorization.
      jwt defaultHeader

JWE

Como mencionamos al principio de esta página, JWT es un estándar que permite la transmisión de tokens de una parte a otra con seguridad con respecto a la legitimidad del token pasado. Es bastante común usar este patrón para enviar otras informaciones adicionales, a través de claims.

Sin embargo, es importante tener en cuenta un aspecto de JWT: es un estándar que garantiza la fiabilidad de los datos, pero no su confidencialidad. La información confidencial que se pasa en el cuerpo del token se puede interceptar y exponer.

JWE (JSON Web Encryption) añade una capa adicional de seguridad al token, cifrando los datos que se transfieren. Por lo tanto, puede ampliar la funcionalidad JWT para garantizar la confidencialidad también.

Para agregar JWE a su token, simplemente marque la opción Use JWE-JSON Web Encryption en la ventana de configuración del interceptor.

jwt jwe
Thanks for your feedback!
EDIT

Share your suggestions with us!
Click here and then [+ Submit idea]