Message d’erreur
jwt issuer invalid. expected: https://login.example.com/
Le texte qui suit « expected: » est ce que vous avez configuré, quel qu’il soit ; avec un tableau d’émetteurs, les valeurs sont jointes par des virgules.
jsonwebtoken (Node.js) — JsonWebTokenError from jwt.verify()
Ce que cela signifie
Le claim `iss` du jeton n’est pas égal à l’option `issuer` que vous avez passée à `jwt.verify()` (ou le jeton n’a pas du tout d’`iss`). Le texte qui suit « expected: » est la valeur que vous avez configurée, pas celle du jeton. jsonwebtoken compare les chaînes exactement : la signature est donc valide, mais le jeton prétend provenir d’une source à laquelle votre service ne fait pas confiance.
Pourquoi cela se produit
Même émetteur, écriture différente
fréquenteUne barre oblique finale, une confusion entre http et https, un hôte en majuscules ou un segment de chemin manquant (`/realms/main`, `/v2.0`, `/oauth2/default`). Les fournisseurs d’identité écrivent `iss` exactement comme l’`issuer` de leur document de découverte ; le vérificateur doit utiliser la même chaîne.
Le jeton n’a pas de claim iss
occasionnelleLes services de jetons internes omettent souvent `iss`. Lorsque l’option `issuer` est définie, un claim manquant produit le même message, car il n’y a rien à comparer.
Le jeton provient réellement d’un autre émetteur
occasionnelleUn jeton issu d’un autre locataire, d’un autre environnement ou d’un autre fournisseur. Ici, l’erreur est la preuve que la protection fonctionne : continuez à rejeter ce jeton.
Comment corriger l’erreur
- 1.
Afficher l’iss du jeton en JSON
`JSON.stringify` rend visibles les différences invisibles : barres obliques finales, espaces, chemin différent. Copiez ensuite l’`issuer` du fournisseur depuis `/.well-known/openid-configuration` dans votre configuration.
js const { iss } = jwt.decode(token) ?? {}; console.log(JSON.stringify(iss)); // compare byte for byte with your issuer option - 2.
N’accepter plusieurs émetteurs que délibérément
L’option `issuer` accepte un tableau. Utilisez-le pour une migration planifiée entre deux écritures ou entre des émetteurs que vous contrôlez, et associez chaque émetteur à ses propres clés.
js jwt.verify(token, publicKey, { algorithms: ["ES256"], issuer: ["https://login.example.com/", "https://login.example.com"], // during a migration only });