JWT署名ベリファイア
JSON Web Tokenの署名を、HMACシークレット、PEM公開鍵、X.509証明書、JWK、JWKSで検証し、exp、nbf、issuer、audienceもローカルで確認します。
HS256ハッシュ長以上のランダムなバイト列を使ってください(HS256 なら 32 バイト)。短いパスワードはオフラインで総当たりされる恐れがあります。
JWTベリファイアとは?
このツールは、JSON Web Tokenが指定した鍵で署名され、改ざんされていないこと、そして時刻クレームが現時点で有効であることを検証します。HS256/384/512には共有シークレットを、RS、PS、ES、EdDSAのトークンにはPEM公開鍵、X.509証明書、JWK、JWKSを受け付け、issuerとaudienceのチェックや時計のずれの許容値も任意で指定できます。
JWTベリファイアの使い方
- トークンを貼り付けます。ヘッダーのアルゴリズムが表示されます。
- シークレット(HS*)、または公開鍵、証明書、JWK、JWKSを入力します。
- 必要に応じて、時計のずれの許容値、想定するissuerとaudienceを設定するか、「Check the signature only」にチェックを入れます。
- 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が異なる可能性があります。メッセージにどのチェックが失敗したかが示されます。