本文へスキップ
ecdsa.com
ruby-jwt (Ruby)Ruby

エラーメッセージ

Expected a different algorithm (JWT::IncorrectAlgorithm)

別の表記

  • JWT::IncorrectAlgorithm: Expected a different algorithm

ruby-jwt (Ruby) — JWT::IncorrectAlgorithm from JWT.decode

このエラーの意味

トークンの `alg` ヘッダーが、許可したアルゴリズムに含まれていません。また、`algorithm:`/`algorithms:` オプションをまったく渡していない場合、ruby-jwt はどのアルゴリズムも許可しません。ruby-jwt 2.x 以降、検証者はアルゴリズムを明示的に指定しなければなりません。トークン自身のヘッダーを信頼することが、よく知られたアルゴリズム混同攻撃の根本原因だからです。署名はチェックされていません。

発生する理由

修正方法

  1. 1.

    発行者のアルゴリズムを明示的に指定する

    `algorithm:`(短いリストの場合は `algorithms:`)を渡してください。複数のアルゴリズムを使う場合は JWKS ローダーを使い、各トークンが種類の一致する鍵で検証されるようにしてください。

    ruby
    payload, header = JWT.decode(token, public_key, true, algorithm: "ES256")
    # several allowed algorithms (e.g. during a migration), each matched to the right key type:
    payload, header = JWT.decode(token, nil, true, algorithms: ["ES256", "RS256"], jwks: jwks_loader)

関連するエラー

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