¿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.