Fehlermeldung
Audience doesn't match
Auch ausgegeben als
- jwt.exceptions.InvalidAudienceError: Audience doesn't match
PyJWT (Python) — jwt.exceptions.InvalidAudienceError
Was der Fehler bedeutet
Das Token hat einen Claim `aud`, und du hast `jwt.decode()` den Parameter `audience=` übergeben, aber kein Wert stimmt überein. PyJWT akzeptiert das Token, wenn mindestens eine Audience des Tokens einer der von dir erlaubten Audiences entspricht; hier war das bei keiner der Fall. Die Signatur war gültig – das Token wurde für einen anderen Empfänger ausgestellt.
Warum der Fehler auftritt
Das Token wurde für eine andere API ausgestellt
häufigSteht ein Identity Provider vor mehreren Diensten, kann ein Client leicht ein für Dienst A ausgestelltes Token an Dienst B senden. Ein solches Token abzulehnen, ist genau der Zweck der Audience-Prüfung.
Abweichende Schreibweise desselben Bezeichners
häufigExakter String-Vergleich: Ein Schrägstrich am Ende, `http` gegenüber `https`, eine Client-ID gegenüber einer URL als API-Bezeichner oder Großbuchstaben zählen alle als unterschiedliche Audiences.
Ein ID-Token hat die API erreicht
gelegentlichID-Tokens von OpenID Connect enthalten in `aud` die ID der Client-Anwendung. Eine API sollte Access Tokens erhalten, die für sie ausgestellt wurden; wer stattdessen das ID-Token weiterleitet, scheitert hier.
So behebst du den Fehler
- 1.
aud des Tokens mit deiner Audience vergleichen
Dekodiere ohne Prüfung nur zum Ansehen und prüfe dann mit dem exakten Bezeichner. Wurde das Token für die falsche Audience ausgestellt, ändere die Token-Anfrage des Clients; war der Bezeichner falsch geschrieben, ändere die prüfende Seite.
python unverified = jwt.decode(token, options={"verify_signature": False}) print(repr(unverified.get("aud"))) # str or list[str] claims = jwt.decode( token, signing_key, algorithms=["ES256"], audience="https://api.example.com/orders", # must equal one of the token's aud values issuer="https://issuer.example.com/", ) - 2.
Mehrere Bezeichner explizit zulassen
`audience` akzeptiert eine Liste. Nutze sie, wenn eine API legitimerweise mehrere Bezeichner hat; übergib niemals `options={"verify_aud": False}`, nur damit der Fehler verschwindet.
python # Any one of these may appear in the token's aud. claims = jwt.decode(token, signing_key, algorithms=["ES256"], audience=["orders-api", "https://api.example.com/orders"])