Tokens web JSON (JWT)

Tink admite la generación y verificación de JWT, que son un estándar ampliamente utilizado en la Web. La implementación de JWT de Tink proporciona un subconjunto del estándar de JWT definido en RFC 7519 que el equipo de Tink considera seguro de usar y que se adapta bien a la biblioteca de Tink.

Tink no admite partes del estándar que se usan con poca frecuencia o que son difíciles de usar correctamente. Estas son las limitaciones:

  • Tink solo admite el formato de serialización compacta de JWS. No se admiten JWS JSON Serialization ni JWE.
  • Tink no admite el valor None en el encabezado alg.
  • Tink solo admite los encabezados typ, alg y kid. No se admiten otros encabezados.
  • Tink no permite que se analicen los tokens antes de que se verifique la firma o el MAC.

Firmas de JWT

Si diferentes entidades generan y verifican los tokens, debes usar claves asimétricas con las primitivas JwtPublicKeySign y JwtPublicKeyVerify. La clave privada se usa para generar tokens y la clave pública se usa para verificarlos. Los algoritmos admitidos por estas primitivas son: ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384 y PS512.

Elige un tipo de clave

Las firmas de JWT usan diferentes tipos de claves que la firma digital normal en Tink. Esto es necesario porque algunos metadatos (como alg y kid) deben almacenarse con la clave.

Recomendamos usar JWT_ES256 para la mayoría de los casos de uso. Los tokens generados con este tipo de clave siempre tienen un encabezado kid. Si prefieres tokens un poco más cortos sin un encabezado kid, elige el tipo de clave JWT_ES256_RAW. Para conocer todos los tipos de claves compatibles, consulta Tipos de claves compatibles.

Distribución del conjunto de claves públicas

Tink permite que los conjuntos de claves públicas se conviertan al formato de conjuntos de JWK definido en RFC 7517, que la mayoría de las bibliotecas de JWT comprenden, y viceversa.

Tink no admite la exportación de claves JWT públicas en ningún otro formato. El motivo es que otros formatos no contienen los metadatos alg y kid que se usarán en la verificación, lo que hace que su uso sea más propenso a errores y puede dificultar la rotación de claves.

Es preferible no solo compartir el conjunto de claves públicas una vez, sino proporcionar una forma de actualizar el conjunto de claves públicas automáticamente. (De lo contrario, rotar a una clave nueva es muy difícil). Esto se suele hacer publicando el conjunto de claves públicas en una URL segura y de confianza. Un servidor que verifica tokens debe volver a recuperar periódicamente el conjunto de claves públicas de esa URL, por ejemplo, una vez al día. Para rotar la clave, la clave pública nueva debe agregarse al conjunto de claves públicas al menos un día antes de que se use para firmar tokens. De lo contrario, los servidores que aún usen el conjunto de claves públicas anterior rechazarán los tokens nuevos firmados con la nueva clave privada.

MAC del JWT

Tink también admite JWT con claves simétricas con la primitiva JwtMac. Solo usa este elemento primitivo si la misma entidad genera y verifica los tokens. Los algoritmos compatibles con esta primitiva son HS256, HS384 y HS512.

Elige un tipo de clave

Los tipos de claves MAC de JWT son diferentes de los tipos de claves MAC normales. Recomendamos usar JWT_HS256 para la mayoría de los casos de uso.

Ejemplos de casos de uso

Consulta Quiero crear y verificar JWTs.