本文へスキップ
ecdsa.com
jose (JavaScript)JWT ライブラリ

エラーメッセージ

"alg" (Algorithm) Header Parameter value not allowed

jose (JavaScript) — JOSEAlgNotAllowed, code ERR_JOSE_ALG_NOT_ALLOWED

このエラーの意味

トークンの alg ヘッダーで指定されたアルゴリズムが、jwtVerify に渡したアルゴリズムの許可リストに含まれていません。jose は暗号処理を始める前の段階で拒否します。このチェックは意図的なものです。alg ヘッダーは攻撃者が制御できる入力であり、アルゴリズムはトークンではなく検証者が選ばなければなりません。

発生する理由

修正方法

  1. 1.

    許可リスト、鍵、発行者の設定をそろえる

    まずヘッダーを確認し、3 つすべてを一致させてください。移行期間中は両方のアルゴリズムを一時的に受け入れ、JWKS の kid でそれぞれに専用の鍵を割り当ててください。

    js
    import { decodeProtectedHeader, jwtVerify } from "jose";
    
    console.log(decodeProtectedHeader(token)); // { alg: "ES256", kid: "..." }
    await jwtVerify(token, jwks, { algorithms: ["ES256"] });
  2. 2.

    許可リストをできるだけ小さく保つ

    すべてのアルゴリズムを列挙して、このエラーを「修正」してはいけません。安全な最終形は、トークンの種類ごとに値を 1 つにすることです。RFC 8725(JWT Best Current Practices)も同じことを述べています。

    js
    // good: exactly what your issuer signs with
    { algorithms: ["ES256"] }
    // bad: defeats the protection this error provides
    { algorithms: ["ES256", "RS256", "HS256", "PS256"] }

関連するエラー

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