Dans un JWS, alg détermine comment la signature est calculée : HS256, RS256, PS256, ES256, ES256K, Ed25519, etc., ou none. Dans un JWE, il détermine comment la clé de contenu est transmise, tandis que enc désigne l’algorithme de chiffrement du contenu. Les valeurs sont des chaînes sensibles à la casse, inscrites au registre IANA « JSON Web Signature and Encryption Algorithms ».
Tant que la signature n’est pas vérifiée, l’en-tête est contrôlé par l’attaquant : le vérificateur ne doit donc pas le laisser choisir l’algorithme. Configurez l’algorithme accepté (idéalement un seul) pour chaque clé et rejetez tout le reste (RFC 8725 §3.1). Des bibliothèques qui aiguillent sur alg ont déjà accepté none ou utilisé une clé publique RSA comme secret HMAC.
La RFC 9864 (2025) rend obsolètes les identifiants « polymorphes » comme EdDSA, dont le sens dépend de la clé, au profit d’identifiants entièrement spécifiés comme Ed25519, afin que le nom de l’algorithme suffise à déterminer l’opération.