Fehlermeldung
jwt audience invalid. expected: <audience>
Der Platzhalter wird mit deinem konfigurierten Wert gefüllt, zum Beispiel „jwt audience invalid. expected: api://orders“.
Was der Fehler bedeutet
Das Token hat die kryptografische Prüfung bestanden, aber sein Claim aud passt nicht zu der Audience, die dein Prüfer verlangt. Die Audience-Prüfung gibt es, damit ein für eine API ausgestelltes Token nicht bei einer anderen erneut vorgelegt werden kann – die Signatur belegt, wer das Token ausgestellt hat, aud belegt, für welchen Dienst es ausgestellt wurde, und beide Prüfungen müssen bestanden sein, bevor du den Claims vertrauen kannst.
Warum der Fehler auftritt
Bezeichner weicht beim exakten Vergleich ab
häufigaud wird exakt als String verglichen. https://api.example.com gegenüber https://api.example.com/ (Schrägstrich am Ende), http gegenüber https oder eine Client-ID gegenüber einem API-Bezeichner – jeder dieser Unterschiede lässt die Prüfung scheitern. OAuth-Provider tragen oft die client_id in aud ein, wenn du keine bestimmte Audience anforderst.
Das Token wurde für eine andere API ausgestellt
häufigDer Client hat ein Token für Dienst A erhalten und es an Dienst B gesendet. Häufig, wenn ein Identity Provider mehrere APIs bedient: Der Parameter audience in der Token-Anfrage muss die API nennen, der das Token vorgelegt wird.
aud ist ein Array, und die Erwartungen weichen ab
gelegentlichaud darf laut Spezifikation ein Array von Strings sein. jsonwebtoken erkennt eine Übereinstimmung, wenn irgendein Element einem der erwarteten Werte entspricht – Code, der aud vorab von Hand validiert und dabei einen einfachen String annimmt, scheitert aber an Claims mit Array-Wert.
So behebst du den Fehler
- 1.
Inhalt des Tokens mit deiner Erwartung vergleichen
Gib beide Seiten aus. Korrigiere die Seite, die falsch ist: die Audience-Option des Prüfers oder den Parameter audience/resource, den der Client beim Anfordern des Tokens verwendet.
js const { aud } = jwt.decode(token); console.log("token aud:", aud); // e.g. "api://orders" or ["api://orders"] jwt.verify(token, key, { algorithms: ["ES256"], audience: "api://orders", // must match exactly (string, array or RegExp) }); - 2.
Legitime Varianten explizit akzeptieren
Sind für diese API wirklich mehrere Bezeichner gültig, liste sie auf – schalte die Audience-Prüfung nicht ab, nur damit der Fehler verschwindet.
js jwt.verify(token, key, { algorithms: ["ES256"], audience: ["api://orders", "https://api.example.com"], });