JWTデコードツール
JWT(JSON Web Token)文字列を貼り付けると、ヘッダー・ペイロードを復号して表示し、有効期限(exp)が切れているかを判定します。署名の検証は行わないため、改ざんされていないことの確認にはなりません。処理はすべてブラウザ内で完結し、入力内容がサーバーへ送信されることはありません。
これは署名を検証しません。改ざん検知の目的では使用できません。秘密鍵(または公開鍵)を持たないため、内容を復号して表示するだけです。
これは署名を検証しません。改ざん検知の目的では使用できません。
有効期限の指定なし
このトークンには exp(有効期限)クレームが含まれていません。 / 発行(iat): 2018-01-18T01:30:22.000Z
署名(signature): SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWTデコードの使い方
JWT文字列を貼り付ける
ヘッダー・ペイロード・署名がドットで区切られた文字列(xxxxx.yyyyy.zzzzz の形式)を入力欄に貼り付けます。サンプルボタンで動作を試すこともできます。
ヘッダー・ペイロードを確認する
復号されたJSONがそれぞれ整形表示されます。alg(署名アルゴリズム)やexp(有効期限)など、含まれるクレーム(項目)を確認してください。
有効期限の状態を見る
expクレームがあれば「有効期限内」「有効期限切れ」を判定して表示します。exp が無いトークンでは「有効期限の指定なし」と表示されます。
仕組みと考え方
JWT(JSON Web Token)は、ヘッダー・ペイロード・署名の3つをドットで連結した文字列です。ヘッダーとペイロードはそれぞれJSONをBase64URL(パディングを省いたURLセーフなBase64)で符号化しただけのもので、暗号化はされていません。本ツールはこのBase64URLを復号してJSON.parse()するだけの処理を、ブラウザ内で行っています。
重要な注意点として、本ツールは署名を一切検証しません。署名の検証には発行者が持つ秘密鍵(HS256などの共通鍵方式)または公開鍵(RS256などの公開鍵方式)が必要ですが、本ツールはそれを持たず、また受け取ってもいません。つまり「内容を読める」ことと「改ざんされていないと確認できる」ことはまったく別で、本ツールができるのは前者だけです。トークンの真正性を確認する必要がある場合は、発行元のシステムで署名検証を行ってください。
有効期限の判定は、ペイロードに含まれるexp(有効期限、UNIX秒)を現在時刻と比較しているだけです。expが無いトークンや、時計が大きくずれた端末では判定が実態と合わないことがあります。iat(発行時刻)も同様に表示しますが、どちらも発行者が任意に設定した値であり、署名を検証しない以上、値そのものが改ざんされていないことは保証できません。
使いどころ・注意点
- JWTには機密情報を平文で入れないのが原則。ヘッダー・ペイロードは誰でも読めるため、パスワードなどを含めてはいけない。
- 本ツールで表示した内容を「正当なトークンである証明」として扱わない。真正性の確認には発行元での署名検証が必須。
- algが"none"になっているトークンは署名なしを意味し、それ自体が改ざんの兆候であることが多い。
- 有効期限切れのトークンでログインエラーが出た場合は、まずexpの値をこのツールで確認し、発行からの経過時間を確認する。
よくある質問
貼り付けたJWTは保存・送信されますか?
いいえ。復号処理はブラウザ内のJavaScriptだけで行い、当サイトのサーバーへは送信していません。
このツールで「改ざんされていない」ことを確認できますか?
できません。署名の検証には発行者の秘密鍵・公開鍵が必要ですが、本ツールはそれを持たず検証も行いません。内容を復号して表示するだけの機能です。
「JWTの形式が正しくありません」と出ます。
JWTはドットで区切られた3つの部分(ヘッダー・ペイロード・署名)から成る必要があります。コピーの際に一部が欠けていないか、余分な空白や改行が混ざっていないかを確認してください。
有効期限が「指定なし」と出ます。
ペイロードにexp(有効期限)クレームが含まれていないトークンです。有効期限の運用をしていないトークン、またはリフレッシュトークンなど別の仕組みで期限を管理している場合にこの表示になります。
ペイロードのJSONが不正だとエラーになりました。
Base64URL部分は正しくデコードできても、その中身が有効なJSONでない場合はJWTとして不完全です。トークンの発行元やコピー元を確認してください。