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

エラーメッセージ

jwt audience invalid. expected: <audience>

プレースホルダーには、設定した値が入ります。例:「jwt audience invalid. expected: api://orders」。

このエラーの意味

トークンは暗号学的には検証に成功しましたが、その aud クレームが、検証者の要求するオーディエンスと一致しません。オーディエンスのチェックは、ある API 向けに発行されたトークンを別の API に対してリプレイできないようにするためにあります。署名はトークンを誰が発行したかを証明し、aud はどのサービス向けに発行されたかを証明します。クレームを信頼するには、両方のチェックに合格しなければなりません。

発生する理由

修正方法

  1. 1.

    トークンに含まれる値と期待する値を比較する

    両方の値を出力してください。そのうえで、間違っているほう(検証者のオーディエンスのオプション、またはクライアントがトークンを要求するときに使う audience/resource パラメーター)を修正してください。

    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. 2.

    正当なバリエーションを明示的に受け入れる

    この API で複数の識別子が本当に有効なら、それらを列挙してください。エラーを消すためにオーディエンスのチェックを外してはいけません。

    js
    jwt.verify(token, key, {
      algorithms: ["ES256"],
      audience: ["api://orders", "https://api.example.com"],
    });

関連するエラー

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