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

エラーメッセージ

Invalid audience

別の表記

  • jwt.exceptions.InvalidAudienceError: Invalid audience

「Audience doesn't match」と比べてください。そちらは、`audience` は渡したものの、一致する値がなかったことを意味します。

PyJWT (Python) — jwt.exceptions.InvalidAudienceError

このエラーの意味

トークンには `aud` クレームが含まれていますが、`jwt.decode()` は `audience` 引数なしで呼び出されました。PyJWT は、チェックできないオーディエンスを無視しません。受信者を指定しているトークンは、自分がどの受信者なのかを指定しない限り拒否されます。`aud` の型が不正な場合(文字列でも文字列のリストでもない場合)にも、同じメッセージが表示されます。

発生する理由

修正方法

  1. 1.

    自分がどのオーディエンスなのかを PyJWT に伝える

    自分の API の識別子(または受け入れ可能な識別子のリスト)を渡してください。`verify_aud` を無効にしてはいけません。このチェックがあるからこそ、ほかのサービス向けのトークンが受け入れられずに済みます。

    python
    claims = jwt.decode(
        token,
        signing_key,
        algorithms=["ES256"],
        audience="https://api.example.com",  # the identifier your API is registered with
    )
  2. 2.

    検証なしのデコードは中身の確認にだけ使う

    `verify_signature: False` は、オーディエンスを含むすべてのチェックを無効にします。デバッグ中に `aud` を読むには便利ですが、リクエストの認可に使ってはいけません。

    python
    # Reading claims without trusting them (debugging, routing) - never for authorization.
    header = jwt.get_unverified_header(token)
    claims = jwt.decode(token, options={"verify_signature": False})

関連するエラー

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