Authlib est une boîte à outils OAuth 2.0 et OpenID Connect complète pour Flask, Django, Starlette et httpx, et authlib.jose est la couche JWS, JWE, JWK et JWT sur laquelle elle a été bâtie. Dans la 1.9.1, son import émet authlib.jose module is deprecated, please use joserfc instead. ; les mainteneurs ont déplacé le code JOSE dans le paquet distinct joserfc, et l’ancien module est conservé pour compatibilité jusqu’à la 2.0. Le code existant continue de fonctionner, mais le nouveau code devrait cibler joserfc.
Le piège le plus fréquent est que decode() ne vérifie que la signature. Un jeton expiré depuis une heure est ressorti de decode() sans la moindre objection ; l’expiration, l’émetteur et l’audience ne sont vérifiés que lorsque vous appelez claims.validate(), avec des claims_options qui marquent exp et iss comme essentiels, car sinon un jeton qui ne les contient pas passe aussi. La marge de tolérance est nulle, sauf si vous en passez une à validate().
La gestion des algorithmes dépend de l’objet utilisé. Le jwt de niveau module accepte tous les algorithmes qu’il connaît et choisit selon le type de clé, si bien qu’un jeton RS256 présenté avec une clé EC a échoué à l’import de la clé ; une instance JsonWebToken(["ES256"]) n’autorise que ce que vous listez. Lister none suffit pour qu’un jeton non signé passe la vérification : ne laissez donc jamais une valeur de configuration se retrouver dans cette liste. Les clés HMAC qui ressemblent à des clés publiques PEM sont refusées avec This key may not be safe to import, et ES256 refuse une clé P-384.
Dans la 1.9.1, les algorithmes pris en charge couvrent les familles HS, RS, PS et ES, ES256K et EdDSA, mais pas les noms Ed25519 ni Ed448. Les signatures ES256 font 64 octets de r‖s brut ; une signature DER échoue avec bad_signature, ce que le débogueur JWT et le convertisseur DER ⇄ brut aident à diagnostiquer. Pour voir à quoi ressemblent les jetons et les clés d’un fournisseur d’identité, utilisez le validateur de jetons OIDC et le vérificateur JWKS.
L’exemple utilise une instance JsonWebToken restreinte et valide explicitement les claims : les deux étapes que l’API de niveau module laisse de côté.