JWT エンコーダー/デコーダー
トークンを貼り付けるだけでヘッダーとペイロードを表示します。独自のクレームから署名することもでき、ボタン操作もアップロードも不要です。
デコード時は任意です(入力すると検証します)。署名には必須です。
署名:
トークン
ヘッダー
ペイロード
使い方
- トークンを貼り付けると、ヘッダーとペイロードがすぐに表示されます。ボタンを押す必要はありません。トークン由来の内容は署名されたときのまま保持され、入力が書き換えられることはありません。
- 入力欄の下にシークレットを入力すると署名を検証できます。空のままでは「未検証」となり、クレームはそのまま表示されます。
- エンコードに切り替え、クレームを JSON で入力し、HS256/384/512 とシークレットを選ぶと、生成されたトークンをコピーできます。モードを切り替えても入力内容は消えません。
- 標準の exp / iat / nbf クレームは、お使いの言語とタイムゾーンで表示され、期限切れや有効開始前の印も付きます。
例
トークン
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1LTEwMjQiLCJuYW1lIjoiSmFuZSBDb29wZXIiLCJyb2xlIjoiZWRpdG9yIiwiaXNzIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20iLCJpYXQiOjE3NjcyMjU2MDAsImV4cCI6MTc5ODc2MTYwMH0.jCqliF6m-TAglXcHrjuXj7kYIjjsRO7kv6_8O1yb_7Q
ヘッダーとペイロード
Header
{
"alg": "HS256",
"typ": "JWT"
}
Payload
{
"sub": "u-1024",
"name": "Jane Cooper",
"role": "editor",
"iss": "https://api.example.com",
"iat": 1767225600,
"exp": 1798761600
}シークレット「dev-secret-change-me」で署名されています。シークレット欄に入力すると、ステータス行が「署名を検証しました」に変わります。エンコードに切り替えてサンプルを押すと同じペイロードが得られ、同じシークレットを使えばこのトークンが 1 文字ずつ正確に再現されます。
ルール・制限・既知の問題
- 署名と検証に対応しているのは HS256、HS384、HS512 のみです。RS*、ES*、PS* のトークンはデコードしてそのまま表示しますが、署名の検証は行いません。公開鍵が必要なため、推測せずにステータス行でその旨を表示します。
- 署名なしトークン(alg: none)はデコードして明確に警告しますが、生成はしません。シークレットなしで署名を要求すると、署名なしトークンではなくエラーになります。
- エンコード時はヘッダーを自身で構築します(`{"alg": … ,"typ": "JWT"}`)。kid、jku、x5c、cty などのヘッダーフィールドは引き継がれません。このツールが署名するのはクレームであり、証明書チェーンではありません。
- クレームの JSON は署名前にコンパクトに再シリアライズされるため、インデントやコメントはトークンに含まれません。キーの順序は JavaScript オブジェクトに従い、重複キーは最後の値にまとめられ、数値に見えるキーは先頭に移動します。
- 非常に大きな整数は精度を失います。`12345678901234567890` は丸められた値で返ります。これは JavaScript の数値の仕様です。黙って補正することはないため、正確な桁数が必要な場合は文字列を使ってください。
- クレームは読みやすくインデントして表示しますが、署名の対象はトークン内の生のセグメントそのものです。裏で再エンコードすることはないため、ここで検証できたトークンはご自身のコードでも検証できます。
- Base64url は厳格です。`+`、`/`、`=` は黙って受け入れずエラーとして報告し、UTF-8 でないバイト列も置換文字で埋めずに報告します。貼り付けたトークン内の空白は無視されます(トークンに空白は含まれないため)。
- 暗号化された JWE(5 つの部分)は復号しません。貼り付けた内容がそれであることを通知します。
- サイズ上限は 10,000 文字です。アップロード、保存、URL への書き込み、共有は一切行いません。共有ボタンが共有するのはこのページのアドレスのみで、トークンやシークレットは共有されません。
関連ツール
クレームを確認した後によく使われるツールです。