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

エラーメッセージ

invalid algorithm

このエラーの意味

トークンの alg ヘッダーの値が、検証者が受け入れるアルゴリズムのリストに含まれていません。jsonwebtoken は署名を確認する前にこのチェックを行うため、トークン自体は正しく署名されている可能性があります。単に、許可していない方式で署名されているだけです。このチェックは設計どおりに動作しているセキュリティ機能であり、解析のバグではありません。

発生する理由

修正方法

  1. 1.

    許可リストを発行者が実際に使うアルゴリズムに固定する

    ヘッダーをデコードして実際の alg を確認し、許可リストをその値だけにしてください。あわせて、鍵の種類が一致していることも確認してください(ES256 には EC 鍵、RS256 には RSA 鍵)。

    js
    const { header } = jwt.decode(token, { complete: true });
    console.log(header.alg); // e.g. "ES256"
    
    jwt.verify(token, ecPublicKeyPem, { algorithms: ["ES256"] });
  2. 2.

    アルゴリズムの変更は 2 段階で展開する

    鍵やアルゴリズムのローテーション中は、検証者は短期間だけ両方の方式を受け入れなければなりません。その際、それぞれの方式を kid で専用の鍵に結び付けます。ローテーションが済んだら、受け入れる方式を 1 つに戻します。

    js
    // transition window only:
    jwt.verify(token, keyForKid(header.kid), { algorithms: ["ES256", "RS256"] });
    // after all RS256 tokens expired:
    jwt.verify(token, ecPublicKeyPem, { algorithms: ["ES256"] });

関連するエラー

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