JWTデコーダー(トークン解析)
JSON Web Tokenを貼り付けて、ヘッダーとペイロードを整形されたJSONとして表示 — 有効期限は人が読める日付に変換されます。完全オフライン。
1,176回閲覧
デコードできませんでした — ドットで区切られた3つの部分からなるJWTを貼り付けてください。
署名は検証されません: デコードに成功しても、そのトークンが本物であることを意味しません。
仕組み
JSON Web Tokenは、ドットで結合された3つのBase64URLエンコード部分から構成されるコンパクトな文字列です: header.payload.signature。Base64URLは通常のBase64のURLセーフな変種で、+//を-/_に置き換え、末尾の=パディングを省略します。これにより結果はエスケープ処理なしでURLやHTTPヘッダーの中にそのまま収まります。header部分は署名アルゴリズムとトークン種別を示す小さなJSONオブジェクトで、典型的には{"alg":"HS256","typ":"JWT"}のような形になります。payload部分は「クレーム」と呼ばれる任意のキー・バリューのペアから成るJSONオブジェクトで、トークンが誰を表しており何を許可されているかを記述するほか、いくつかの標準的な時間クレームを含みます — iat(発行時刻)、nbf(有効開始前)、exp(有効期限)で、すべてUnixタイムスタンプとして格納されます。署名は最初の2つの部分に対して、headerで指定されたアルゴリズムと、発行元サーバーだけが持つ鍵を使って計算されます。
ここにトークンを貼り付けると、このツールは2つのドットで分割し、headerとpayloadをBase64URLでデコードして、それぞれをインデント付きのJSONとして整形表示します。exp/iat/nbfの値はさらに人が読める日付に変換され、トークンが現在期限切れかどうかを一目で示すバッジも表示されます。
JWTは現代の認証の大部分を支える基盤です — OAuth 2.0のアクセストークン、OpenID ConnectのIDトークン、そして数多くの独自セッションシステムがこの形式を使っています。これは、サーバーがデータベースへの問い合わせなしに他のサービスが読み取れる自己完結型の証明書を発行できるからで、条件は署名を検証できることだけです。よく使われるアルゴリズムはHS256(共有シークレットによるHMAC)とRS256/ES256(非対称のRSAまたは楕円曲線署名で、発行元が秘密鍵を保持し、誰でも対応する公開鍵で検証できる)です。
知っておくべきこと
デコードは検証ではありません。headerとpayloadは単にエンコードされているだけで暗号化されていないため、誰でも鍵なしで読むことができ、また誰でも好きなクレームを持つ偽のトークンを作ることができます。JWTを信頼できるものにする唯一の要素は署名であり、署名を検証するにはシークレット(HMACアルゴリズムの場合)または発行元の公開鍵(RSA/ECDSAアルゴリズムの場合)が必要です。この検証は鍵を保持するサーバー側で行うべきものであり、ブラウザ内のツールで安全に行うことはできません。そこでシークレットを露出させてしまえば、そもそもの目的が失われるからです。このデコーダーはあくまでデバッグ用の補助として扱い、トークンが本物である、あるいは今も有効であることの証明として使わないでください。
貼り付ける内容の扱いにも注意してください。JWTはセッション情報や認可情報を運んでいるため、パスワードと同様に扱い、共有マシン上のいかなるツールにも本番環境の実際のトークンを貼り付けないようにしてください。5つのドット区切り部分を持つトークンはJWE(暗号化)であり、JWS(署名済み)ではありません — このデコーダーはより一般的な署名済みの形式を扱います。また、自分の検証コードの中でalgフィールドを盲目的に信用しないでください — よく知られた攻撃手法は、実装の甘い検証ロジックを騙してalg: noneを受け入れさせたり、RS256をHS256に差し替えさせたりします。署名検証を自作コードではなく検証済みのライブラリに任せるべき理由はここにあります。
よくある質問
デコードはトークンが有効であることを検証しますか?
いいえ — デコードは内容を読み取るだけです。署名の検証には署名鍵または公開鍵が必要であり、それはサーバー側の仕事です。誰でも任意のペイロードでトークンを作成できます。真正性を証明するのは署名だけです。
本番環境の実際のトークンをここに貼り付けても安全ですか?
このツールはトークンを一切送信しません — デコードはローカルで行われます。それでも、本番トークンはパスワードと同様に扱ってください。共有環境でデバッグする場合は、期限切れまたはテスト用のトークンを使うことをお勧めします。
なぜ自分のトークンがデコードできないのですか?
ドットで区切られた3つの部分をすべてコピーしたか、改行が紛れ込んでいないかを確認してください。暗号化されたトークン(JWE、5つの部分)は鍵なしでは読み取れません — このツールは一般的な署名付き(JWS)トークンを処理します。
JWSとJWEトークンの違いは何ですか?
JWS(JSON Web Signature)はこのツールがデコードする署名形式です — 3つの部分から成り、読み取り可能ですが改ざんは検知できます。JWE(JSON Web Encryption)は5つの部分から成り、payload自体が暗号化されているため、復号鍵なしでは一切読み取れません。ここでトークンがデコードされず、ドットが2つではなく4つある場合、それはほぼ確実にJWEです。
exp、iat、nbfクレームはそれぞれ何を意味しますか?
いずれもUnixタイムスタンプです(1970年1月1日からの秒数)。iatはトークンが発行された時刻を、nbfはトークンが有効になる最も早い時刻を、expはトークンが無効になる時刻を記録します。正しく動作するサーバーは、現在時刻がnbf〜expの範囲外にあるトークンをすべて拒否します。
関連ツール
問題を報告
JWTデコーダー(トークン解析)
コメント
まだコメントはありません — 最初のコメントを書いてみましょう!