本文へスキップ
ecdsa.com
jsonwebtoken (Node.js)JWT ライブラリ

エラーメッセージ

jwt issuer invalid. expected: https://login.example.com/

「expected:」の後のテキストは、設定した値そのものです。発行者を配列で指定した場合は、値がカンマで連結されます。

jsonwebtoken (Node.js) — JsonWebTokenError from jwt.verify()

このエラーの意味

トークンの `iss` クレームが、`jwt.verify()` に渡した `issuer` オプションと一致しません(または、トークンに `iss` がまったくありません)。「expected:」の後のテキストは、トークンの値ではなく、設定した値です。jsonwebtoken は文字列を完全一致で比較します。つまり、署名は有効ですが、トークンはサービスが信頼していない発行元から来たと主張しています。

発生する理由

修正方法

  1. 1.

    トークンの iss を JSON として出力する

    `JSON.stringify` を使うと、末尾のスラッシュ、空白文字、パスの違いといった目に見えない差異がわかるようになります。そのうえで、プロバイダーの `issuer` を `/.well-known/openid-configuration` から設定にコピーしてください。

    js
    const { iss } = jwt.decode(token) ?? {};
    console.log(JSON.stringify(iss)); // compare byte for byte with your issuer option
  2. 2.

    複数の発行者は意図した場合にのみ受け入れる

    `issuer` オプションには配列を指定できます。これは、2 つの表記の間、または自分で管理する発行者の間での計画的な移行に使ってください。また、発行者ごとにそれぞれの鍵を対応させてください。

    js
    jwt.verify(token, publicKey, {
      algorithms: ["ES256"],
      issuer: ["https://login.example.com/", "https://login.example.com"], // during a migration only
    });

関連するエラー

署名エラーデータベースをすべて見る