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

エラーメッセージ

The specified alg value is not allowed

別の表記

  • jwt.exceptions.InvalidAlgorithmError: The specified alg value is not allowed

PyJWT (Python) — jwt.exceptions.InvalidAlgorithmError

このエラーの意味

トークンのヘッダーにある `alg` が、`jwt.decode()` に渡した `algorithms` のリストに含まれていません。PyJWT はこれを署名の検証より前にチェックします。ヘッダーはトークンを作成した側が自由に選べるものであり、検証の方法を決めさせてはいけないからです。トークンは正しく署名されているかもしれません。ただ、許可していないアルゴリズムで署名されているだけです。

発生する理由

修正方法

  1. 1.

    まずヘッダーを確認する

    `jwt.get_unverified_header()` は、何も信頼せずに `alg` と `kid` を表示します。これを許可リストや、発行者が公開している鍵と比較してください。

    python
    print(jwt.get_unverified_header(token))  # {'alg': 'ES256', 'kid': '...', 'typ': 'JWT'}
  2. 2.

    発行者のアルゴリズムだけを正確に許可する

    発行者が使うアルゴリズムを `algorithms` に指定し、鍵はその発行者の JWKS から解決してください。移行中は両方のアルゴリズムを列挙し、それぞれを `kid` によって対応する鍵と結び付けてください。

    python
    from jwt import PyJWKClient
    
    jwks = PyJWKClient("https://issuer.example.com/.well-known/jwks.json")
    signing_key = jwks.get_signing_key_from_jwt(token)
    claims = jwt.decode(
        token,
        signing_key.key,
        algorithms=["ES256"],  # the algorithm(s) your issuer actually uses, never the token's own header
        audience="https://api.example.com",
    )

関連するエラー

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