JWTデコーダーとは?
JWT(JSON Web Token)は、現代のWeb APIが認証・認可のクレームを表現するための標準的な方法です。署名アルゴリズムを記述するヘッダー、実際のクレーム(ユーザーID、ロール、有効期限など)を含むペイロード、そして受信サーバーがトークンの改ざんを検証できるようにする署名の3つの部分で構成される、コンパクトで自己完結型のトークンです。
このデコーダーはヘッダーとペイロードを即座に読み取れるため、認証問題のデバッグ、APIが実際に送信しているクレームの確認、トークンの有効期限の確認などができます。すべてブラウザ内でローカルに処理されるため、バックエンドやCLIツールは不要で、センシティブなトークンを第三者のサーバーに送信する必要もありません。
この計算機を使用するタイミング
- APIがトークンを拒否する理由をクレームと有効期限を調べてデバッグする
- サポート調査またはインシデント対応中にトークンの有効期限を確認する
- SSOまたはOAuthプロバイダーが、アプリケーションが期待するクレームを発行していることを検証します。
- 面接準備やセキュリティコースワークのためにJWTの構造を学ぶ
- ブラウザの開発者ツールやサーバーログからキャプチャされたトークンの内容を理解するために確認する
- アルゴリズム不一致による認証障害をデバッグするためにトークン間のヘッダーアルゴリズムを比較する
手順:
- 入力ボックスにJWTを貼り付けるか、「サンプルを読み込む」をクリックして試してみてください。
- 入力すると同時にヘッダーとペイロードが自動的にデコードされます。
- iss、sub、exp、iatなどのクレームを、読みやすい形式で確認できます。
- タイムスタンプクレーム(exp、iat、nbf)は自動的に読みやすい日付に変換されます。
計算式
JWT = base64Url(header) + "." + base64Url(payload) + "." + base64Url(signature)
デコード:"."で分割し、最初の2つの部分をbase64UrlデコードしてJSONとしてパースします。
検証(ここでは行いません):HMACSHA256(base64Url(header) + "." + base64Url(payload), secret) === signature
ユースケース
- APIがトークンを拒否する理由をクレームを調べてデバッグする
- サポート調査中にトークンの有効期限を確認する
- SSOやOAuthプロバイダーが期待通りのクレームを発行しているか検証する
- 面接対策やコースワークのためにJWTの構造を学ぶ
- ブラウザの開発者ツールやサーバーログから貼り付けたトークンを素早く確認する
主な利点
- バックエンドやCLIツールなしで、任意のJWTを瞬時にデコード
- すべてクライアント側で実行——トークンがサーバーに送信されることはありません
- タイムスタンプクレームを自動的に読みやすい日付に変換
- 無料、登録不要、アルゴリズムを問わずどのJWTでも動作
プロのヒント
- 「unauthorized」エラーをデバッグする際は、まず'exp'を確認する——期限切れトークンが最も一般的な原因です
- アルゴリズムの不一致によるバグを見つけるため、ヘッダーの'alg'とバックエンドが期待するものを照合してください
- サーバー側で署名を検証せずに、デコードされたペイロードを身元の証明として決して信用しないでください
- 漏洩時の影響を限定するため、長期間有効なJWTの代わりにリフレッシュトークンを併用した短期間有効なトークンを使用してください
避けるべきよくある間違い
- デコードされたJWTを検証済みJWTだと思い込む——デコードは内容を読み取るだけで、真正性を確認するものではありません
- 機密データ(パスワード、シークレット)をペイロードに保存し、誰でも読めることを忘れてしまう
- 本番トークンを信頼できないオンラインデコーダーに貼り付ける
- トークンの有効期間の問題をデバッグする際に'exp'(有効期限)と'iat'(発行日時)を混同する
重要な用語の説明
- クレーム:ユーザーIDやロールなど、主体について主張される情報の一片
- ヘッダー:署名アルゴリズムとトークンタイプを指定する最初のJWTセグメント
- ペイロード:実際のクレームを含む2番目のJWTセグメント
- 署名:トークンが改ざんされていないことを検証するために使用される3番目のJWTセグメント
関連コンセプト
- ハッシュジェネレーター:
- UUIDジェネレーター:
- Base64エンコーダー/デコーダー:
- JSONフォーマッター:
- パスワード強度チェッカー:
例
eyJhbGciOiJIUzI1NiJ9で始まるトークンは、{"alg":"HS256","typ":"JWT"}というヘッダーにデコードされます——これはトークンがHMAC-SHA256で署名されていることを示しています。
結果の解釈方法
デコーダーはJWTを2つのドット区切りで分割し、最初の2セグメントをBase64URLでデコードします。ヘッダーには署名アルゴリズム(HS256やRS256など)とトークンの種類が示されます。ペイロードには実際のクレーム(ユーザーID、権限、タイムスタンプ)が含まれます。
タイムスタンプのクレーム(exp、iat、nbf)はUnixエポックから読みやすい日付へ自動変換されます。'exp'が過去の日付を示している場合、トークンは期限切れで、ほとんどのサーバーが拒否します。'sub'(サブジェクト)クレームには通常ユーザーIDが含まれ、'iss'(発行者)はトークンを作成したサーバーを識別します。
デコードは検証ではないことを覚えておいてください。署名セクションは表示されますが、秘密鍵または公開鍵なしでは検証できません。デコードされたペイロードは参考情報にすぎません。サーバー側の署名検証なしに、身元の証明として信頼してはいけません。

