Message d’erreur
jwt audience invalid. expected: <audience>
L’espace réservé est rempli avec la valeur que vous avez configurée, par exemple « jwt audience invalid. expected: api://orders ».
Ce que cela signifie
Le jeton a passé la vérification cryptographique, mais son claim aud ne correspond pas à l’audience qu’exige votre vérificateur. Le contrôle d’audience existe pour qu’un jeton créé pour une API ne puisse pas être rejoué contre une autre : la signature prouve qui a émis le jeton, aud prouve pour quel service il a été émis, et les deux contrôles doivent réussir avant que l’on puisse se fier aux claims.
Pourquoi cela se produit
L’identifiant ne correspond pas exactement
fréquenteaud est comparé à l’identique, caractère par caractère. « https://api.example.com » face à « https://api.example.com/ » (barre oblique finale), http face à https, ou un ID client face à un identifiant d’API : chacune de ces différences fait échouer le contrôle. Les fournisseurs OAuth placent souvent le client_id dans aud, sauf si vous demandez une audience précise.
Le jeton a été émis pour une autre API
fréquenteLe client a obtenu un jeton pour le service A et l’a envoyé au service B. C’est fréquent lorsqu’un même fournisseur d’identité dessert plusieurs API : le paramètre audience de la requête de jeton doit nommer l’API à laquelle le jeton sera présenté.
aud est un tableau et les attentes divergent
occasionnelleaud peut légitimement être un tableau de chaînes. jsonwebtoken accepte le jeton si l’un des éléments est égal à l’une des valeurs attendues – mais du code qui prévalide aud manuellement en supposant une simple chaîne échoue sur les claims dont la valeur est un tableau.
Comment corriger l’erreur
- 1.
Comparer ce que porte le jeton avec ce que vous attendez
Affichez les deux côtés. Corrigez celui qui est en tort : l’option audience du vérificateur, ou le paramètre audience/resource que le client utilise pour demander le jeton.
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.
Accepter explicitement les variantes légitimes
Si plusieurs identifiants sont réellement valides pour cette API, listez-les ; ne supprimez pas le contrôle d’audience pour faire disparaître l’erreur.
js jwt.verify(token, key, { algorithms: ["ES256"], audience: ["api://orders", "https://api.example.com"], });