JWTの構造とBase64URLエンコード
JSON Web Token(JWT)は、ドット(.)で区切られた3つのパートで構成されるコンパクトなトークン規格です。それぞれのパートは、ヘッダー、ペイロード、署名(シグネチャ)を表しています。
JWTの各パートは、URLでの安全な転送を可能にするためにBase64URLエンコードが施されています。Base64URLは、標準的なBase64から「+」を「-」に、「/」を「_」に置き換え、末尾のパディング文字「=」を省略したエンコード方式です。本ツールは、入力されたJWTの各パートを検出し、Base64URLデコードを行って元のJSONデータを復元します。
ヘッダーとペイロードの役割と共通クレーム
デコードされたJWTは、JSONフォーマットで記述された2つの主要なデータブロックを保持しています。
ヘッダー
ヘッダーは、トークンのメタデータを定義するJSONオブジェクトです。一般的に以下のクレームが含まれます。
alg(アルゴリズム):署名の生成や検証に使用される暗号アルゴリズム(例:HS256、RS256)を指定します。typ(タイプ):トークン自体の種類を示し、通常は「JWT」が指定されます。
ペイロード
ペイロードには、伝達対象となる実際のデータ(クレーム)が格納されます。標準的に用いられる主なクレームは以下の通りです。
iat(発行日時):トークンが生成された時刻をUNIXタイムスタンプで示します。exp(有効期限):トークンの利用期限をUNIXタイムスタンプで示します。
デコードと署名検証の違い
JWTのデコードと署名の検証は、セキュリティ上全く異なる処理です。
デコードは、Base64URLエンコードされた文字列を元のテキスト(JSON)に戻すだけの処理であり、特別な鍵を必要としません。誰でもトークンの中身を読み取ることができます。
一方、検証は、トークンが改ざんされていないこと、および信頼できる発行元から送信されたものであることを証明する処理です。これには、署名用の秘密鍵または公開鍵を用いた暗号学的な計算が必要です。本ツールはデコードのみを行うものであり、署名の検証は行いません。また、署名用の秘密鍵や公開鍵を要求することもありません。
ツールの動作仕様とエラーハンドリング
入力フィールドにJWTを貼り付けると、ツールは即座に解析を開始します。入力された文字列の状態に応じて、以下のルールに基づき処理が行われます。
- 入力待ち状態: 入力フィールドが空の場合、ツールは「準備完了。JWT を貼り付けるとデコードされます。」という状態を維持します。
- フォーマット検証: 入力された文字列がドットで区切られた3つのパートで構成されていない場合、「有効な JWT ではありません。ドット(.)で区切られた3つのパートが必要です。」と表示され、デコードエリアは非表示になります。
- 長さ制限: 入力された文字列が制限を超えて長すぎる場合、「実際の JWT にしては長すぎます。」というエラーが表示されます。
- Base64URLデコードエラー: ヘッダーまたはペイロードのデコードに失敗した場合、それぞれ「ヘッダーをデコードできませんでした。無効な Base64URL です。」または「ペイロードをデコードできませんでした。無効な Base64URL です。」と表示されます。
- JSON検証エラー: デコードされたデータが正しいJSON形式でない場合、「ヘッダーが有効な JSON ではありません。」または「ペイロードが有効な JSON ではありません。」と表示されます。
- クリア処理: 入力をクリアすると、表示は「クリアしました。」となり、フォーカスは自動的に入力フィールドに戻ります。
解析結果の出力項目
正常にデコードが完了すると、以下の情報が抽出・表示されます。
| 項目 | 表示内容 |
|---|---|
| ヘッダー | デコードされたJSON形式のヘッダー情報 |
| ペイロード | デコードされたJSON形式のペイロード情報 |
| アルゴリズム | トークンで使用されている暗号アルゴリズム |
| タイプ | トークンの種別 |
| 発行日時 | iat クレームから解析されたトークンの発行時刻 |
| 有効期限 | exp クレームから解析されたトークンの失効時刻 |
| 文字数 | 入力されたJWT全体の文字数 |
また、トークンの有効期限状態を示すステータスバッジが表示されます。ステータスは、exp クレームの値に基づいて「有効」、「期限切れ」、「未発効」、または exp クレームが存在しない場合の「期限なし」のいずれかに分類されます。なお、この判定は exp クレームのみを検証するものであり、署名、発行者、またはオーディエンスの検証は行いません。
プライバシーとデータ処理について
本ツールでのトークンのデコード処理は、すべてお使いのブラウザ内で行われます。入力されたJWTやデコードされたデータが外部のサーバー(BroBroGo)にアップロードまたは送信されることはありません。
よくある質問(FAQ)
ここに JWT を貼り付けても安全ですか?
はい、安全です。デコード処理はすべてお使いのブラウザ内で行われ、トークンが BroBroGo に送信されることはありません。
署名の検証は行われますか?
いいえ、検証しません。このツールは、ヘッダーとペイロードをデコードして読みやすく表示するだけです。署名の検証には署名用の秘密鍵または公開鍵が必要ですが、このツールがそれらを要求することはありません。
トークンが期限切れかどうかを確認するにはどうすればよいですか?
デコーダーは exp クレームを読み取り、デコードされたトークンの横にステータスバッジ(有効、期限切れ、未発効、または期限なし)を表示します。