jsonwebtoken encode et décode des JWT avec encode, decode et un objet Validation, en s’appuyant sur serde pour les claims. Depuis la version 10, la cryptographie provient d’un backend choisi par une fonctionnalité Cargo (aws_lc_rs ou rust_crypto), et les essais ont utilisé aws_lc_rs. Oublier la fonctionnalité ne fait pas échouer le build : avec les seules fonctionnalités par défaut, la 11.1.0 a compilé, puis a paniqué au premier encode() avec Could not automatically determine the process-level CryptoProvider. Activez exactement un backend, comme le fait le manifeste de l’exemple.
L’ensemble des algorithmes est une enum fermée : la signature et la vérification ont réussi avec HS, RS et PS en 256/384/512, ES256, ES384 et EdDSA, tandis qu’ES512, ES256K et Ed25519 ne sont même pas des variantes. Il n’existe pas non plus de variante none, si bien qu’un jeton non signé échoue lors de l’analyse de son en-tête avec unknown variant none. Validation::new(alg) constitue la liste d’autorisation : un jeton HS256 contrôlé avec Validation::new(ES256) a échoué avec InvalidAlgorithm, et même avec les deux algorithmes autorisés, un jeton HS256 dont la clé est le texte PEM de la clé publique EC a échoué avec InvalidKeyFormat, car une DecodingKey EC ne peut pas servir de secret HMAC.
Les contrôles de claims sont plus stricts que dans la plupart des bibliothèques : un jeton sans exp échoue avec Missing required claim: exp, et la marge de tolérance par défaut est de 60 secondes (un jeton expiré depuis 57 secondes a encore été validé). Réduisez leeway et définissez l’émetteur et l’audience sur la Validation, comme le fait l’exemple. ES256 refuse une clé P-384 au moment de la signature avec InvalidEcdsaKey.
Les signatures ES256 sont le r‖s brut de 64 octets qu’exige JWS, et une signature DER échoue avec InvalidSignature. Les clés se chargent depuis du PEM (from_ec_pem, from_rsa_pem, from_ed_pem) et du DER ; pour Ed25519 en DER, la clé d’encodage a accepté du PKCS#8 et la clé de décodage la clé publique brute de 32 octets. Examinez les jetons avec le débogueur JWT et testez les secrets HMAC avec le vérificateur de secrets JWT.
Pour des signatures hors JWT, utilisez directement les crates des backends : aws-lc-rs ou RustCrypto ecdsa.