JWT デコーダー — Header と Payload を閲覧するために JWT トークンをデコード
JWT トークンをデコードして Header と Payload の claim を表示します。Base64 デコードのみ、署名検証は行いません。ブラウザで動作し、トークンが端末から外に出ることはありません。
JWT Decoder
Decode JWT tokens to view header and payload. Works entirely in your browser — your tokens never leave your device.
JSON Web Token(JWT)は、Web 上で最も一般的な認証フォーマットです。あらゆる OAuth2 フロー、あらゆる OpenID Connect セッション、そしてあらゆる現代応用における API 令牌 は JWT です。3 つの Base64URL エンコードセグメントがドットで連結され、Header、claim からなる Payload、暗号化署名を保持しています。Header と Payload は暗号化されているわけではなく、base64 エンコードされているだけです。つまり、トークンを取得した人であれば誰でもデコードできます。セキュリティの保証は Payload の機密性ではなく署名にあります。署名は、Payload が信頼される機関によって発行され、かつ改ざんされていないことを証明するものです。JWT デコーダーは Header と Payload の claim を読み取るためのもので、あらゆる認証フローをデバッグする第一歩となります。
すべての JWT デコーダーが提示すべきセキュリティ上の警告があります。それは「デコードは検証ではない」ということです。デコーダーは Payload の claim(トークンの発行者、有効期限、付与されている権限など)を読み取るだけで、署名の確認は行いません。デコードが成功したトークンであっても、署名が無効であれば偽造された可能性があります。正しい秘密鍵または公開鍵で署名が検証されるまでは、デコード済みの JWT を認証・認可の証拠として用いないでください。本デコーダーはブラウザで動作し、トークンをサーバーへ送信することはないので、デコードされた claim を見られるのはご自身だけです。ただし、それでも認証の証拠にはならないことに変わりありません。
JWT をデコードする最も一般的な目的は、有効期限を確認することです。exp claim は Unix タイムスタンプであり、デコーダーは人間 readable な有効期限日時を表示し、トークンがすでに失効しているかどうかをハイライトします。次に多い目的はカスタム claim の確認です。トークンの発行者が Payload に埋め込んだ、ユーザー ID、ロール、テナント識別子、権限セットといった応用固有のデータです。デコードされた Payload は、「トークンが何を表しているか」についての真実の source of truth です。それらの claim が実際に有効かどうかは、検証器に委ねられます。
使い方
JWT を貼り付ける
JWT 文字列(ドットで区切られた 3 つの Base64URL エンコードセグメント)を入力欄に貼り付けます。デコーダーはトークンをドット区切りで分割し、Header と Payload をデコードします。
claim を確認する
Header と Payload は JSON にデコードされます。よく使われる claim(`iss`、`sub`、`aud`、`exp`、`iat`、`nbf`、`jti`)は RFC 7519 の説明付きでハイライト表示されます。`exp` claim はローカルタイムゾーンでの人間 readable な有効期限が表示されます。
デコードした JSON をコピーする
Header または Payload の JSON をクリップボードにコピーできます。トークン内容の手動デバッグやカスタム claim の確認、API 呼び出し前の有効期限チェックなどにお使いいただけます。
よくある質問
なぜ署名検証をしないのですか?
署名検証には、そのトークンに署名した秘密鍵または公開鍵が必要です。本デコーダーは Header と Payload(base64 エンコードされているだけで、暗号化されてはいません)を読み取り、その内容を表示するだけです。鍵とバックエンドサービスを伴う署名検証なしに、デコード済みの JWT を信用しないでください。
JWT はサーバーへ送信されますか?
いいえ。デコード処理はブラウザ内で完結し、ネットワークリクエストは一切発生しません。トークンは端末から外に出ません。これがクライアントサイドの JWT デコーダーと、トークンを自社サーバーに送信してデコードする多数の Web サイトとの根本的な違いです。
`exp` claim とは何ですか?
`exp`(expiration time、有効期限)claim は Unix タイムスタンプ(1970-01-01T00:00:00Z からの経過秒数)です。この時刻を過ぎると、検証サーバーはトークンを拒否すべきです。デコーダーはローカルタイムゾーンで有効期限を表示するため、トークンがすでに失効しているかどうかをひと目で確認できます。
暗号化 JWT(JWE)にも対応していますか?
いいえ。JWE は暗号化されているため、復号鍵がなければ読み取ることはできません。本デコーダーが扱えるのは、署名のみで暗号化されていない JWT(JWS)です。暗号化された JWT は 3 セグメントではなく 5 つの Base64URL セグメントで構成されるため、デコーダーはその形式を解析できない旨を表示します。
JWT の標準 claim には何がありますか?
RFC 7519 は 7 つの registered claim を定義しています:`iss`(issuer、発行者 — トークンを作成した主体)、`sub`(subject、主題 — トークンが表す対象)、`aud`(audience、受信者 — トークンの利用対象)、`exp`(expiration、有効期限)、`nbf`(not before、開始時刻)、`iat`(issued at、発行時刻)、`jti`(JWT ID — リプレイ攻撃を防ぐための一意な識別子)。デコーダーはこれらを RFC の定義と共にハイライト表示します。
制限事項
- 署名検証を行わない本ツールはデコーダーであり、検証器ではありません。デコード済みの JWT は信頼済みの JWT ではありません。署名が検証されていない場合、Payload の claim が伝送途中で改ざんされている可能性があります。認証・認可のためにこれらの claim を信頼する前に、必ず信頼できるバックエンドで正しい鍵を用いて署名を検証してください。
- 鍵の自動取得を行わないデコーダーは JWKS エンドポイントを fetch したり、OIDC メタデータから公開鍵を発見したりすることはありません。トークン自体のみを読み取ります。鍵の管理は別問題です。
- JWE には対応しない暗号化された JWT は 5 セグメントからなる異なる形式(JWE)を使用します。JWE を貼り付けてもデコーダーは解析を拒否します。暗号化トークンの処理には、バックエンドの復号ライブラリをご利用ください。
プラットフォーム別の注意点
- macOS
- macOS では `pbpaste` でクリップボードを入力欄に貼り付けられます。またはブラウザツールでデコードできます。CLI のみで完結したい場合は、`echo $TOKEN | cut -d. -f2 | base64 -d | jq` で Payload をデコードできます。
- Windows
- ブラウザツールはインストール不要で JWT をデコードできます。CLI のみで完結したい場合は、PowerShell の `[System.Convert]::FromBase64String()` と `ConvertFrom-Json` を組み合わせて Payload をデコードできます。
- Linux
- CLI のみで完結したい場合は、`echo $TOKEN | cut -d. -f2 | base64 -d 2>/dev/null | jq .` で Payload をデコードできます。シェル履歴にトークンを残したくない場合は、ブラウザツールが適しています。
- Web
- 完全にクライアントサイドで動作し、ネットワークリクエストは一切発生せず、トークンは端末から外に出ません。メール・チャット・サポートチケットなどで JWT を受け取った際、安全に内容を確かめたいときにご利用ください。