JWT
JWT デコーダー
JSON Web Token のヘッダーとペイロードをデコードします。
JWT について
JSON Web Token は、ヘッダー、ペイロード、署名をドットで結合した 3 つの Base64URL エンコードされたセグメントにまとめたものです。ヘッダーとペイロードは単なるエンコードされた JSON で誰でも読めますが、署名こそがトークンが改ざんされていないことを実際に証明するものです。
ヘッダーの alg フィールドは署名アルゴリズムを示しますが、ヘッダーはデコードされただけの未検証の JSON にすぎないため、クライアントはそこに書かれた内容が真実だと信用することはできません。よく知られた JWT の脆弱性の一つは、攻撃者が alg を「none」に書き換えて署名を取り除き、不用心な検証側が未署名のトークンを受け入れてしまうことを狙うものです。本当の検証は、検証側のサーバー自身が選んだ特定のアルゴリズムと鍵に対して署名を確認しなければならず、トークンから読み取ったものであってはいけません。ペイロードの exp や iat クレームは Unix タイムスタンプ(ミリ秒ではなく、エポックからの秒数)です。これらをカレンダー上の日付として読むには、このツールをタイムスタンプ変換ツールと組み合わせてください。
使われる場面
- OAuth や OIDC プロバイダが発行したアクセストークンや ID トークンを確認する
- トークンに期待するクレームが欠けている理由を調べる
- コードを書かずにトークンの有効期限や発行者を確認する
- サードパーティの API やライブラリがトークンに実際に何を入れているかを理解する
よくある質問
デコードすると署名は検証されますか?
いいえ。これはヘッダーとペイロードを読めるようにデコードするだけです。署名は検証されないため、デコードされたトークンはそれが本物であることや期限切れでないことの証明にはなりません。
検証していないトークンのクレームを信頼できますか?
セキュリティ上の判断には使えません。誰でも任意のクレームを持つ JWT を作成できます。発行者の鍵で検証された署名だけが内容を信頼できるものにします。
ここに貼り付けたトークンは保存されますか?
いいえ。デコードはその 1 回のリクエストの中だけで完結し、記録も保持もされません。
ヘッダーの alg フィールドは信頼できますか?
それ単体では信頼できません。生のトークンを読む人から見れば、ヘッダーは未検証で攻撃者が自由に書き換えられる JSON です。よく知られた JWT 攻撃では alg を「none」にして署名を完全に取り除き、ヘッダーを鵜呑みにする検証側がそれを有効と受け入れることを狙います。正しい検証コードは、期待するアルゴリズムと鍵をあらかじめ固定しておき、その判断をトークン自身から取ることは決してありません。このツールは読むためにデコードするだけで、信頼に関する判断は一切行いません。