¿Qué es JWT?

JSON Web Token (JWT) es un estándar abierto (RFC 7519) que define una forma compacta y autónoma de transmitir información de forma segura en forma de objetos JSON entre partes. Esta información se puede verificar y confiar porque está firmada digitalmente. JWT se puede firmar con un secreto (usando el algoritmo HMAC) o con un par de claves pública/privada usando RSA o ECDSA.

Escenarios de aplicación:

Autorización: este es el escenario más común para usar JWT

Intercambio de información: los tokens web JSON se utilizan para transmitir información de forma segura entre las partes A buen camino.

JSON Web Token consta de tres partes, separadas por puntos (?.?), que son:

Encabezado

Carga útil

¿Firma?Firma

JWT suele tener este aspecto:

Header.Payload.Signature

Encabezado:

Suele estar compuesto por dos partes Composición : tipo de token (JWT) y algoritmo de firma utilizado (como HMAC SHA256 o RSA).

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

Base64Url codifica este JSON para formar la primera parte del JWT

Carga útil:

Carga útil, que contiene reclamos. Los reclamos son declaraciones sobre una entidad (generalmente un usuario) y datos adjuntos. Los reclamos se dividen en tres categorías: reclamos registrados, públicos y privados.

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

Base64Url codifica la carga útil para formar la segunda parte de tokens web JSON.

¿Firma?Firma:

Si desea utilizar el algoritmo HMAC SHA256, la firma se creará de la siguiente manera:

HMACSHA256(

? base64UrlEncode(encabezado) "."

?base64UrlEncode(carga útil),

?secret)

Descripción del parámetro:

HMACSHA256: El uso de SHA256 se debe a que alg: HS256 en el encabezado. Si es alg: HS128, es HMACSHA28.

base64UrlEncode: Los tres caracteres utilizados en Base64 son " ", "/" y "=" Dado que tienen significados especiales en las URL, se reemplazan en Base64URL: "=" se elimina. con "-", "/" con "_", este es el algoritmo Base64URL.

secreto: clave proporcionada por el servidor

Firma: Finalmente, el valor después de HMACSHA256 se convierte a Base64URL para obtener la firma requerida.

El resultado son tres cadenas de URL Base64, separadas por puntos, que se pueden pasar fácilmente en entornos HTML y HTTP y son más compactas en comparación con los estándares basados ​​en XML, como SAML.