Comprendre les JSON Web Tokens : choisir un algorithme

La RFC 7518 enregistre des dizaines d’algorithmes. La plupart du temps il vous en faut un, et le choisir tient en trois questions.

Question un : qui vérifie ?

Si la même partie émet et vérifie, un secret partagé suffit : HS256. Il est rapide et simple.

Si quelqu’un d’autre vérifie, il vous faut une signature asymétrique, pour qu’il ne détienne qu’une clé publique. ES256 donne des signatures courtes et une vérification rapide. EdDSA est le choix moderne là où la prise en charge le permet. RS256 reste le pari le plus sûr pour l’interopérabilité, au prix de signatures bien plus volumineuses.

La faute à éviter : émettre en HS256 et laisser quiconque détient le secret partagé frapper des jetons que vous accepterez. Un secret partagé est une clé de signature remise à chaque vérificateur.

Question deux : combien de temps le jeton vit-il ?

Un jeton d’accès de courte durée et une assertion de longue durée n’appellent pas les mêmes choix. Plus un jeton reste valable longtemps, plus une clé compromise reste utile longtemps, et plus la discipline de rotation compte.

Question trois : chiffrez-vous ?

Pour la gestion de clés, préférez ECDH-ES ou RSA-OAEP-256. Pour le contenu, A256GCM.

Des noms à cesser d’employer

La règle qui prime sur tout cela

Quoi que vous choisissiez, décidez-le du côté qui vérifie et refusez tout le reste. Un vérificateur qui accepte l’algorithme que le jeton déclare est un vérificateur qu’un attaquant configure.