jsonwebtoken kodiert und dekodiert JWTs mit encode, decode und einem Objekt Validation und nutzt serde für die Claims. Seit Version 10 stammt die Kryptografie aus einem Backend, das per Feature-Flag ausgewählt wird (aws_lc_rs oder rust_crypto); für die Prüfung wurde aws_lc_rs verwendet. Ein vergessenes Feature lässt den Build nicht scheitern: Nur mit den Standard-Features ließ sich Version 11.1.0 kompilieren, löste dann aber beim ersten encode() eine Panic mit Could not automatically determine the process-level CryptoProvider aus. Aktiviere genau ein Backend, wie es das Manifest des Beispiels tut.
Die Algorithmen bilden ein geschlossenes Enum: Mit HS, RS und PS bei 256/384/512, ES256, ES384 und EdDSA funktionierten Signieren und Prüfen, während ES512, ES256K und Ed25519 gar keine Varianten sind. Auch eine Variante none gibt es nicht, ein unsigniertes Token scheitert also schon beim Parsen seines Headers mit unknown variant none. Validation::new(alg) ist die Liste der zulässigen Algorithmen: Ein HS256-Token, geprüft mit Validation::new(ES256), scheiterte mit InvalidAlgorithm, und selbst mit beiden zugelassenen Algorithmen scheiterte ein HS256-Token, dessen HMAC-Schlüssel der PEM-Text des öffentlichen Schlüssels vom Typ EC ist, mit InvalidKeyFormat, weil ein DecodingKey vom Typ EC nicht als HMAC-Secret dienen kann.
Die Prüfung der Claims ist strenger als in den meisten Bibliotheken: Ein Token ohne exp scheitert mit Missing required claim: exp, und die Standardtoleranz beträgt 60 Sekunden – ein Token, das 57 Sekunden zuvor abgelaufen war, galt noch als gültig. Verringere leeway und setze Aussteller und Audience im Objekt Validation, wie es das Beispiel tut. ES256 lehnt einen P-384-Schlüssel schon beim Signieren mit InvalidEcdsaKey ab.
ES256-Signaturen sind das 64 Byte lange rohe r‖s, das JWS verlangt, und eine DER-Signatur scheitert mit InvalidSignature. Schlüssel lassen sich aus PEM (from_ec_pem, from_rsa_pem, from_ed_pem) und DER laden; bei Ed25519 in DER nahm der Schlüssel zum Kodieren PKCS#8 entgegen und der Schlüssel zum Dekodieren den rohen, 32 Byte langen öffentlichen Schlüssel. Untersuche Tokens im JWT-Debugger und teste HMAC-Secrets mit dem JWT-Secret-Checker.
Für Signaturen außerhalb von JWT nutze die Backend-Crates direkt: aws-lc-rs oder RustCrypto ecdsa.