Jetons Web JSON (JWT)

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

Tink n'est pas compatible avec certaines parties de la norme qui sont rarement utilisées ou difficiles à utiliser correctement. Voici les limites:

  • Tink n'accepte que le format de sérialisation JWS Compact. La sérialisation JSON JWS et JWE ne sont pas compatibles.
  • Tink n'accepte pas 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 ne permet pas d'analyser les jetons avant la validation de la signature ou de l'adresse MAC.

Signatures JWT

Si des 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 vérifier. Les algorithmes acceptés par 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 ceux 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 dans la plupart des cas. Les jetons générés avec ce type de clé ont 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 la page Types de clés acceptés.

Distribution des jeux de clés publiques

Tink permet de convertir une collection de clés publiques vers et depuis le format d'ensembles JWK défini dans la RFC 7517, ce que la plupart des bibliothèques JWT comprennent.

Tink ne permet pas d'exporter des clés JWT publiques dans un autre format. En effet, d'autres formats ne contiennent pas les métadonnées alg et kid à utiliser pour la validation, ce qui les rend plus sujettes aux erreurs et peut compliquer la rotation des clés.

Il est préférable de ne pas partager la collection de clés publique une seule fois, mais de fournir un moyen de la mettre à jour automatiquement. (Si ce n'est pas le cas, la rotation vers une nouvelle clé est très difficile.) Cela se fait souvent en publiant la collection de clés publiques sur une URL fiable et sécurisée. Un serveur qui vérifie les jetons doit ensuite simplement récupérer périodiquement la collection de clés publique à partir de cette URL, par exemple une fois par jour. Pour effectuer la rotation de la clé, la nouvelle clé publique doit être ajoutée à la collection de clés publique au moins un jour avant de l'utiliser pour signer les jetons. Sinon, les nouveaux jetons signés avec la nouvelle clé privée seront rejetés par les serveurs qui utilisent toujours l'ancienne collection de clés publique.

Adresse MAC JWT

Tink accepte également les jetons JWT avec des clés symétriques à l'aide de la primitive JwtMac. N'utilisez cette primitive si les jetons sont générés et validés par la même entité. Les algorithmes acceptés par 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 dans la plupart des cas.