DevTools Japan トップへ

JWTデコーダー

JSON Web Tokenのペイロードをデコード表示

JWT入力

ヘッダー

ペイロード

JWTデコーダーについて

JSON Web Tokenのペイロードをデコード表示。ブラウザ上で動作し、データがサーバーに送信されることはありません。

JWTの構造

JWT(JSON Web Token)は、認証や認可の情報をやり取りするためのコンパクトなトークン形式です。1つのJWTは Header(ヘッダー)Payload(ペイロード)Signature(署名) という3つのパートを、ドット(.)で繋いだ xxxxx.yyyyy.zzzzz という構造をしています。

このうちHeaderとPayloadはそれぞれ JSON を Base64URLエンコードしたものです。Base64URLは通常のBase64に似ていますが、URLで扱いやすいよう +- に、/_ に置き換え、末尾のパディング(=)を省略した方式です。Headerにはトークンの種類(typ)と署名アルゴリズム(alg)が、Payloadには実際の主張(クレーム)が格納されます。3つ目のSignatureは、HeaderとPayloadを連結した文字列に対して、指定アルゴリズムと秘密鍵(または公開鍵ペア)で生成された署名値で、トークンが改ざんされていないことを保証します。本ツールはHeaderとPayloadをBase64URLデコードして中身をそのまま表示し、Payloadに exp が含まれる場合は有効期限の状態(有効/期限切れ)も判定します。

主要なクレーム(Payload)

クレーム意味
iss発行者(Issuer)。トークンを発行した主体を表す
sub主体(Subject)。トークンの対象となるユーザーIDなど
aud対象者(Audience)。このトークンの想定利用先
exp有効期限(Expiration Time)。これを過ぎると無効。Unix時間(秒)
iat発行時刻(Issued At)。トークンが発行された時刻。Unix時間(秒)
nbf有効開始時刻(Not Before)。この時刻より前は無効。Unix時間(秒)
jtiJWT ID。トークンを一意に識別するための識別子

これらは RFC 7519 で定義された標準クレーム(Registered Claim Names)です。いずれも省略可能ですが、相互運用性のために用途を統一する目的で予約されています。これら以外に、アプリケーションが独自に定義するプライベートクレーム(例: namerole など)を自由に含めることもできます。

よくある質問

入力したJWTトークンがサーバーに送信されることはありますか?
いいえ。デコード処理はすべてお使いのブラウザ上のJavaScriptで完結し、入力したJWTがサーバーに送信されることはありません。とはいえトークンには機密情報が含まれる場合があるため、本番環境の有効なトークンの取り扱いには十分ご注意ください。
JWTは暗号化されていますか?
いいえ。一般的なJWT(JWS形式)は暗号化ではなく署名で改ざんを防いでいるだけで、HeaderとPayloadは単にBase64URLでエンコードされているだけです。そのため鍵がなくても誰でもデコードして中身を読めます。パスワードやクレジットカード番号などの機密情報はPayloadに入れないでください。
このツールは署名検証もしますか?
いいえ。本ツールはHeaderとPayloadをBase64URLデコードして中身を表示し、exp(有効期限)の状態を確認する用途です。3つ目の署名(Signature)の正当性検証には秘密鍵や公開鍵が必要なため行っていません。中身の確認や認証デバッグにご利用ください。
exp(有効期限)はどう読みますか?
expはUnix時間(エポック秒、1970年1月1日UTCからの経過秒数)で記録されています。ミリ秒ではなく秒である点に注意してください。本ツールでは自動で日本時間に変換し、現在時刻と比較して「有効」か「期限切れ」かを表示します。
JWTとセッションの違いは何ですか?
従来のセッション方式は、サーバー側でセッション情報を保持し、クライアントには識別子(セッションID)だけを渡します。一方JWTは、必要な情報をトークン自体に含めて署名するため、サーバーが状態を保持しなくても検証できる(ステートレス)のが特徴です。スケールしやすい反面、発行済みトークンの即時無効化が難しいなどのトレードオフがあります。

関連ツール

Base64変換ツール JSON整形ツール ハッシュ生成ツール
コピーしました