JWT署名ベリファイア

JSON Web Tokenの署名を、HMACシークレット、PEM公開鍵、X.509証明書、JWK、JWKSで検証し、exp、nbf、issuer、audienceもローカルで確認します。

アルゴリズム: HS256

ハッシュ長以上のランダムなバイト列を使ってください(HS256 なら 32 バイト)。短いパスワードはオフラインで総当たりされる恐れがあります。

検証は jose ライブラリでローカルに実行されます。鍵を指定した場合にのみ「検証済み」となります。鍵なしでは、どのツールも JWT が本物であることを証明できません。

JWTベリファイアとは?

このツールは、JSON Web Tokenが指定した鍵で署名され、改ざんされていないこと、そして時刻クレームが現時点で有効であることを検証します。HS256/384/512には共有シークレットを、RS、PS、ES、EdDSAのトークンにはPEM公開鍵、X.509証明書、JWK、JWKSを受け付け、issuerとaudienceのチェックや時計のずれの許容値も任意で指定できます。

JWTベリファイアの使い方

  1. トークンを貼り付けます。ヘッダーのアルゴリズムが表示されます。
  2. シークレット(HS*)、または公開鍵、証明書、JWK、JWKSを入力します。
  3. 必要に応じて、時計のずれの許容値、想定するissuerとaudienceを設定するか、「Check the signature only」にチェックを入れます。
  4. Verifyを押して結果を確認します。成功すると、ペイロードと時刻クレームが表示されます。

例

入力
The jwt.io sample token (HS256) with secret your-256-bit-secret
出力
✓ Signature verified with HS256 and the time claims are valid.

シークレットが wrong-secret の場合、結果は Signature verification failed. になります。

JWTベリファイアを使うべき場面

トークンが期待するサーバーによって発行されたかの確認、「invalid signature」エラーのデバッグ、鍵のローテーションのテストに使います。正しい鍵がなければ、どんなツールもJWTを検証できません。本番のシークレットをWebサイトに貼り付けるのは避け、共有しても安全な公開鍵を使ってください。

JWTベリファイアの仕組み

検証は、joseライブラリとWeb Cryptoを使ってローカルで実行されます。トークンのヘッダーに記載されたアルゴリズムのみが許可され、alg「none」は常に拒否されます。HMACトークンはシークレットのUTF-8(またはBase64デコード後)のバイト列で、非対称トークンはインポートしたSPKI、X.509、JWK、またはローカルのJWKS(kidで照合)で検証されます。署名の後、expとnbfがデバイスの時計(と許容値)と比較され、入力した場合はiss/audも比較されます。失敗した場合は、それぞれ具体的な理由が報告されます。

一般的な使用例

  • ローテーション後に、トークンが現在の鍵と古い鍵のどちらで署名されたかを確認する。
  • ゲートウェイがトークンを拒否する理由(期限切れ、audience違い、署名不正)をデバッグする。
  • OpenID Connectの IDトークンを、プロバイダーのJWKSで検証する。
  • トークンが改ざんされていないことを確認する。

セキュリティ注意事項

検証はブラウザ内で行われ、鍵とトークンはアップロードされません。公開鍵は共有しても安全ですが、シークレットは共有してはいけません。

よくある質問

鍵なしでトークンを検証できますか。

いいえ。署名は、シークレット(HMAC)または発行者の公開鍵でのみ確認できます。鍵なしのデコードでは何も証明されません。

公開鍵はどこで入手できますか。

OpenID Connectプロバイダーは、/.well-known/openid-configurationに記載されたjwks_uriでJWKSを公開しています。そのJSONをここに貼り付けてください。

署名が有効でも失敗するのはなぜですか。

トークンが期限切れ、まだ有効でない(nbf)、または入力したものとissuerやaudienceが異なる可能性があります。メッセージにどのチェックが失敗したかが示されます。

おすすめの次のステップ

他のカテゴリを見る