Вы находитесь на странице: 1из 11

¿Qué es el token web JSON?

El token web de JSON (JWT) es un estándar abierto ( RFC 7519 ) que define

una forma compacta y autónoma para transmitir de forma segura información

entre las partes como un objeto JSON. Esta información puede ser verificada y

confiable porque está firmada digitalmente. Los JWT pueden firmarse usando

un secreto (con el algoritmo HMAC ) o un par de claves pública / privada

usando RSA o ECDSA .

Aunque los JWT pueden cifrarse para proporcionar también el secreto entre las

partes, nos centraremos en los tokens firmados . Los tokens firmados pueden

verificar la integridad de las reclamaciones que contiene, mientras que los

tokens cifrados ocultan esas reclamaciones de otras partes. Cuando los tokens

se firman utilizando pares de clave pública / privada, la firma también certifica

que solo la parte que posee la clave privada es la que la firmó.

¿Cuándo debes usar los tokens web de JSON?

Aquí hay algunos escenarios donde JSON Web Tokens son útiles:

 Autorización : Este es el escenario más común para usar JWT. Una vez

que el usuario haya iniciado sesión, cada solicitud subsiguiente incluirá

el JWT, lo que le permitirá acceder a las rutas, los servicios y los

recursos que se permiten con ese token. El inicio de sesión único es una

característica que utiliza ampliamente JWT en la actualidad, debido a su


pequeña sobrecarga y su capacidad para ser utilizada fácilmente en

diferentes dominios.

 Intercambio de información : los tokens web de JSON son una buena

forma de transmitir información de forma segura entre las partes. Debido

a que los JWT pueden firmarse, por ejemplo, mediante el uso de pares

de claves pública / privada, puede estar seguro de que los remitentes

son quienes dicen que son. Además, como la firma se calcula utilizando

el encabezado y la carga útil, también puede verificar que el contenido

no haya sido manipulado.

¿Qué es la estructura del token web JSON?


En su forma compacta, los tokens web de JSON constan de tres partes

separadas por puntos ( .), que son:

 Encabezamiento

 Carga útil

 Firma

Por lo tanto, un JWT normalmente se parece a lo siguiente.

xxxxx.yyyyy.zzzzz

Vamos a desglosar las diferentes partes.

Encabezamiento
El encabezado generalmente consta de dos partes: el tipo de token, que es

JWT, y el algoritmo de firma que se está utilizando, como HMAC SHA256 o

RSA.

Por ejemplo:

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

Entonces, este JSON está codificado en Base64Url para formar la primera

parte del JWT.

Carga útil

La segunda parte del token es la carga útil, que contiene las

reclamaciones. Las reclamaciones son declaraciones sobre una entidad

(normalmente, el usuario) y datos adicionales. Hay tres tipos de reclamaciones:

reclamaciones registradas , públicas y privadas .

 Reclamaciones registradas : son un conjunto de reclamaciones

predefinidas que no son obligatorias pero se recomiendan para

proporcionar un conjunto de reclamaciones útiles e

interoperables. Algunos de ellos son: iss (emisor), exp(tiempo de

vencimiento), sub (sujeto), aud (audiencia) y otros .

Tenga en cuenta que los nombres de las reclamaciones solo tienen tres

caracteres, ya que JWT debe ser compacto.


 Reclamaciones públicas : estas pueden definirse a voluntad por

aquellos que usan JWT. Pero para evitar colisiones, deben definirse en

el Registro de token web JANA de IANA o definirse como un URI que

contiene un espacio de nombres resistente a colisiones.

 Reclamaciones privadas : estas son las reclamaciones personalizadas

creadas para compartir información entre las partes que acuerdan

usarlas y no sonreclamaciones públicas o registradas .

Un ejemplo de carga útil podría ser:

{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}

La carga útil se codifica en Base64Url para formar la segunda parte del token

web JSON.

Tenga en cuenta que para los tokens firmados esta información, aunque

protegida contra la manipulación, puede ser leída por cualquier persona. No

coloque información secreta en los elementos de carga útil o encabezado de un

JWT a menos que esté cifrada.

Firma

Para crear la parte de la firma, debe tomar el encabezado codificado, la carga

útil codificada, un secreto, el algoritmo especificado en el encabezado y

firmarlo.
Por ejemplo, si desea utilizar el algoritmo HMAC SHA256, la firma se creará de

la siguiente manera:

HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)

La firma se usa para verificar que el mensaje no se cambió en el camino y, en

el caso de tokens firmados con una clave privada, también puede verificar que

el remitente del JWT es quien dice que es.

Poniendo todos juntos

La salida son tres cadenas Base64-URL separadas por puntos que pueden

pasarse fácilmente en entornos HTML y HTTP, al tiempo que son más

compactas en comparación con los estándares basados en XML, como SAML.

A continuación se muestra un JWT que tiene el encabezado anterior y la carga

útil codificados, y está firmado con un

secreto.

Si desea jugar con JWT y poner estos conceptos en práctica, puede usar

el Depurador jwt.io para decodificar, verificar y generar JWT.


¿Cómo funcionan los tokens web de JSON?

En la autenticación, cuando el usuario inicia sesión con éxito utilizando sus

credenciales, se devolverá un token web JSON. Dado que los tokens son

credenciales, se debe tener mucho cuidado para evitar problemas de


seguridad. En general, no debes mantener los tokens más tiempo del

requerido.

Cuando el usuario desea acceder a una ruta o recurso protegido, el agente de

usuario debe enviar el JWT, generalmente en el encabezado

de Autorizaciónutilizando el esquema del Portador . El contenido del

encabezado debe ser similar al siguiente:

Authorization: Bearer <token>


Esto puede ser, en ciertos casos, un mecanismo de autorización sin

estado. Las rutas protegidas del servidor buscarán un JWT válido en

el Authorizationencabezado y, si está presente, el usuario podrá acceder a los

recursos protegidos. Si el JWT contiene los datos necesarios, la necesidad de

consultar la base de datos para ciertas operaciones puede reducirse, aunque

este no siempre sea el caso.

Si el token se envía en el Authorizationencabezado, el uso compartido de

recursos entre orígenes (CORS) no será un problema, ya que no utiliza

cookies.

El siguiente diagrama muestra cómo se obtiene y se utiliza un JWT para

acceder a las API o los recursos:


1. La aplicación o el cliente solicita autorización al servidor de autorización. Esto se
realiza a través de uno de los diferentes flujos de autorización. Por ejemplo,
una aplicación web típica compatible con OpenID Connect pasará por
el /oauth/authorizepunto final utilizando el flujo de código de autorización .
2. Cuando se otorga la autorización, el servidor de autorización devuelve un token de
acceso a la aplicación.
3. La aplicación usa el token de acceso para acceder a un recurso protegido (como
una API).

Tenga en cuenta que con los tokens firmados, toda la información contenida en

el token está expuesta a los usuarios u otras partes, aunque no puedan

cambiarla. Esto significa que no debes poner información secreta dentro del

token.

¿Por qué debemos usar los tokens web de JSON?

Hablemos sobre los beneficios de los tokens web JSON (JWT) en

comparación con los tokens web simples (SWT) y los token en lenguaje de

marcado de aserción de seguridad (SAML) .

Como JSON es menos detallado que XML, cuando se codifica, su tamaño

también es más pequeño, lo que hace que JWT sea más compacto que
SAML. Esto hace que JWT sea una buena opción para pasar en entornos

HTML y HTTP.

En cuanto a la seguridad, SWT solo puede ser firmado simétricamente por un

secreto compartido utilizando el algoritmo HMAC. Sin embargo, los tokens JWT

y SAML pueden usar un par de claves pública / privada en forma de un

certificado X.509 para la firma. Firmar XML con firma digital XML sin introducir

oscuros agujeros de seguridad es muy difícil en comparación con la simplicidad

de firmar JSON.

Los analizadores JSON son comunes en la mayoría de los lenguajes de

programación porque se asignan directamente a los objetos. Por el contrario,

XML no tiene una asignación natural de documento a objeto. Esto hace que

sea más fácil trabajar con JWT que con aserciones de SAML.

En cuanto al uso, JWT se utiliza a escala de Internet. Esto resalta la facilidad

del procesamiento del lado del cliente del token web JSON en múltiples

plataformas, especialmente en dispositivos móviles.


Comparación de la longitud de un JWT codificado y un SAML codificado
Si desea leer más sobre los tokens web de JSON e incluso comenzar a usarlos

para realizar la autenticación en sus propias aplicaciones, vaya a

la página de inicio del token web de JSON en Auth0.

Вам также может понравиться