Jetons Web JSON (JWT)

Tink permet de générer et de valider des JWT, qui sont une norme largement utilisée sur le Web. L'implémentation JWT de Tink fournit un sous-ensemble de la norme JWT définie dans la RFC 7519 que l'équipe Tink considère comme sûre et qui s'intègre bien à la bibliothèque Tink.

Tink ne prend pas en charge les parties de la norme qui sont rarement utilisées ou difficiles à utiliser correctement. Voici les limites :

  • Tink n'est compatible qu'avec le format JWS Compact Serialization. JWS JSON Serialization et JWE ne sont pas acceptés.
  • Tink n'est pas compatible avec la valeur None dans l'en-tête alg.
  • Tink n'accepte que les en-têtes typ, alg et kid. Les autres en-têtes ne sont pas acceptés.
  • Tink n'autorise pas l'analyse des jetons avant la vérification de la signature ou du MAC.

Signatures JWT

Si les jetons sont générés et validés par différentes entités, vous devez utiliser des clés asymétriques avec les primitives JwtPublicKeySign et JwtPublicKeyVerify. La clé privée sert à générer des jetons, tandis que la clé publique permet de les valider. Les algorithmes compatibles avec ces primitives sont les suivants : ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384 et PS512.

Choisir un type de clé

Les signatures JWT utilisent des types de clés différents de la signature numérique normale dans Tink. Cela est nécessaire, car certaines métadonnées (telles que alg et kid) doivent être stockées avec la clé.

Nous vous recommandons d'utiliser JWT_ES256 pour la plupart des cas d'utilisation. Les jetons générés avec ce type de clé comportent toujours un en-tête kid. Si vous préférez des jetons légèrement plus courts sans en-tête kid, choisissez le type de clé JWT_ES256_RAW. Pour connaître tous les types de clés acceptés, consultez Types de clés acceptés.

Distribution de clés publiques

Tink permet de convertir les ensembles de clés publiques au format JWK Sets défini dans la RFC 7517, que la plupart des bibliothèques JWT comprennent.

Tink n'est pas compatible avec l'exportation de clés JWT publiques dans d'autres formats. En effet, les autres formats ne contiennent pas les métadonnées alg et kid à utiliser pour la validation, ce qui les rend plus sujets aux erreurs et peut rendre la rotation des clés plus difficile.

Il est préférable de ne pas se contenter de partager le keyset public une seule fois, mais de fournir un moyen de mettre à jour le keyset public automatiquement. (Sinon, la rotation vers une nouvelle clé est très difficile.) Cela se fait souvent en publiant le keyset public sur une URL fiable et sécurisée. Un serveur qui valide les jetons doit ensuite récupérer régulièrement l'ensemble de clés publiques à partir de cette URL (par exemple, une fois par jour). Pour alterner la clé, la nouvelle clé publique doit être ajoutée au keyset public au moins un jour avant son utilisation pour signer les jetons. Sinon, les nouveaux jetons signés avec la nouvelle clé privée seront refusés par les serveurs qui utilisent encore l'ancienne collection de clés publiques.

JWT MAC

Tink est également compatible avec les JWT avec clés symétriques avec le type primitif JwtMac. N'utilisez cette primitive que si les jetons sont générés et validés par la même entité. Les algorithmes compatibles avec cette primitive sont HS256, HS384 et HS512.

Choisir un type de clé

Les types de clés MAC JWT sont différents des types de clés MAC normaux. Nous vous recommandons d'utiliser JWT_HS256 pour la plupart des cas d'utilisation.

Exemples de cas d'utilisation

Consultez Je souhaite créer et valider des JWT.