Authlib ist ein vollständiges Toolkit für OAuth 2.0 und OpenID Connect, nutzbar mit Flask, Django, Starlette und httpx, und authlib.jose ist die JWS-, JWE-, JWK- und JWT-Schicht, auf der es aufgebaut wurde. Beim Import gibt Version 1.9.1 authlib.jose module is deprecated, please use joserfc instead. aus; der JOSE-Code wurde in das separate Paket joserfc ausgelagert, und das alte Modul bleibt aus Kompatibilitätsgründen bis Version 2.0 erhalten. Bestehender Code funktioniert weiter, neuer Code sollte aber auf joserfc setzen.
Die häufigste Stolperfalle: decode() prüft nur die Signatur. Ein Token, das eine Stunde zuvor abgelaufen war, kam von decode() ohne Beanstandung zurück; Ablauf, Aussteller und Audience werden erst geprüft, wenn du claims.validate() aufrufst – wobei exp und iss in claims_options als erforderlich (essential) gekennzeichnet sein müssen, denn sonst besteht auch ein Token ohne diese Claims die Prüfung. Die Toleranz (Leeway) ist null, sofern du validate() keine übergibst.
Wie Algorithmen behandelt werden, hängt vom verwendeten Objekt ab. Das jwt auf Modulebene akzeptiert jeden Algorithmus, den es kennt, und wählt nach dem Schlüsseltyp; ein RS256-Token, das mit einem EC-Schlüssel geprüft wurde, scheiterte deshalb erst beim Schlüsselimport. Eine Instanz JsonWebToken(["ES256"]) erlaubt nur, was du auflistest. Steht none in der Liste, besteht schon ein unsigniertes Token die Prüfung – lass also nie zu, dass ein Konfigurationswert in dieser Liste landet. HMAC-Schlüssel, die wie öffentliche Schlüssel im PEM-Format aussehen, werden mit This key may not be safe to import abgewiesen, und ES256 weist einen P-384-Schlüssel ab.
Die in 1.9.1 unterstützten Algorithmen umfassen die Familien HS, RS, PS und ES sowie ES256K und EdDSA, nicht aber die Namen Ed25519 und Ed448. ES256-Signaturen bestehen aus 64 Byte rohem r‖s; eine DER-Signatur scheitert mit bad_signature – bei der Diagnose helfen der JWT-Debugger und der Konverter DER ⇄ Raw. Wie die Tokens und Schlüssel eines Identity Providers aussehen, prüfst du mit dem OIDC-Token-Validator und dem JWKS-Checker.
Das Beispiel verwendet eine eingeschränkte Instanz von JsonWebToken und prüft die Claims explizit – genau die zwei Schritte, die die API auf Modulebene auslässt.