Fehlermeldung
Invalid audience
Auch ausgegeben als
- jwt.exceptions.InvalidAudienceError: Invalid audience
Vergleiche mit „Audience doesn't match“: Diese Meldung bedeutet, dass du `audience` zwar übergeben hast, aber kein Wert übereinstimmte.
PyJWT (Python) — jwt.exceptions.InvalidAudienceError
Was der Fehler bedeutet
Das Token enthält einen Claim `aud`, aber `jwt.decode()` wurde ohne das Argument `audience` aufgerufen. PyJWT ignoriert keine Audience, die es nicht prüfen kann: Ein Token, das seinen Empfänger nennt, wird abgelehnt, solange du nicht angibst, welcher Empfänger du bist. Dieselbe Meldung erscheint, wenn `aud` einen ungültigen Typ hat (weder ein String noch eine Liste von Strings).
Warum der Fehler auftritt
Die prüfende Seite übergibt audience nicht
häufigCode, der für Tokens ohne `aud` geschrieben (oder aus einem minimalen Beispiel kopiert) wurde, scheitert, sobald der Identity Provider beginnt, `aud` mitzuliefern – was die meisten bei Access Tokens und ID-Tokens tun. Die vorgesehene Lösung ist, die erwartete Audience zu übergeben.
Ein ID-Token statt eines Access Tokens
gelegentlichManche Provider stellen Access Tokens ohne `aud` aus, schreiben die Client-ID aber immer in den Claim `aud` des ID-Tokens (Amazon Cognito ist ein häufiges Beispiel). Code, der mit Access Tokens funktioniert, scheitert, sobald ein Client sein ID-Token sendet.
Der Claim aud hat einen ungültigen Typ
seltenEin Aussteller, der `aud` als Zahl, als Objekt oder als Liste mit Elementen schreibt, die keine Strings sind, erzeugt ein Token, das PyJWT mit nichts abgleichen kann.
So behebst du den Fehler
- 1.
PyJWT mitteilen, welche Audience du bist
Übergib den Bezeichner deiner API (oder eine Liste akzeptabler Bezeichner). Schalte `verify_aud` nicht ab – genau diese Prüfung verhindert, dass Tokens für andere Dienste akzeptiert werden.
python claims = jwt.decode( token, signing_key, algorithms=["ES256"], audience="https://api.example.com", # the identifier your API is registered with ) - 2.
Dekodieren ohne Prüfung nur zum Ansehen verwenden
`verify_signature: False` schaltet jede Prüfung ab, auch die der Audience. Das ist nützlich, um beim Debugging `aud` zu lesen, aber nie, um eine Anfrage zu autorisieren.
python # Reading claims without trusting them (debugging, routing) - never for authorization. header = jwt.get_unverified_header(token) claims = jwt.decode(token, options={"verify_signature": False})