JWCrypto implémente la famille JOSE en s’appuyant sur pyca/cryptography : JWK et jeux de clés JWK, JWS, JWE et JWT. Tout repose sur des objets clés (un jwk.JWK construit à partir de PEM, de JSON ou de generate()), ce qui rend le type de clé explicite à chaque appel. La bibliothèque est sous licence LGPL-3.0-or-later, ce qui compte si vous redistribuez des copies modifiées.
Sa couverture d’algorithmes est la plus large des bibliothèques JOSE Python : les familles HS, RS, PS et ES, ES256K, EdDSA et les algorithmes entièrement spécifiés Ed25519 et Ed448, ainsi que, dans la 1.6.1, ML-DSA-44, ML-DSA-65 et ML-DSA-87 avec les clés AKP de l’Internet-Draft JOSE post-quantique, tous signés et vérifiés avec succès lors des essais et tous présents dans la liste autorisée par défaut. C’est justement cette liste par défaut qui pose problème : sauf si vous passez algs, n’importe lequel d’entre eux est accepté pour une clé compatible ; restreignez-la donc à ce que votre émetteur utilise réellement, comme le fait l’exemple.
Les jetons non signés sont refusés avec Algorithm not allowed, sauf si none est listé, et un jeton HS256 présenté avec une JWK publique EC échoue, car ce type de clé ne peut pas exécuter HMAC. ES256 refuse une clé P-384 avec Curve requested is "P-256", but key curve is "P-384". Les signatures ES256 sont sous la forme r‖s brute de 64 octets ; une signature DER échoue avec Verification failed for all signatures : vérifiez l’encodage dans le débogueur JWT.
Deux valeurs par défaut diffèrent de celles des autres bibliothèques. Le contrôle de l’expiration tolère 60 secondes de décalage d’horloge : un jeton expiré depuis 57 secondes a encore été validé, un jeton expiré depuis 63 secondes ne l’a pas été, ce qui est plus permissif que PyJWT ou jose, qui n’en tolèrent aucun. Et exp est facultatif : un jeton sans ce claim a été validé, sauf si check_claims le mentionne.
Construisez des jeux de clés avec le générateur de JWKS et examinez les jetons chiffrés avec l’inspecteur JWE ; pour les clés et signatures ML-DSA, le bac à sable des signatures post-quantiques montre les tailles en jeu.