メインコンテンツへスキップ

JWT デコーダー

JWT(JSON Web Token)のHeader・Payload・Signature をブラウザ上で安全にデコード表示する無料オンラインツール。exp/iat/nbfクレームの日時変換、期限切れ判定、アルゴリズム(HS256/RS256/ES256)表示、コピー機能付き。サーバー送信なしで本番トークンも安全に解析できます。

JWTトークンのHeader・Payload・Signatureをデコードし、日時変換・期限切れ判定も表示するツールです。OAuth・OpenID Connect等のAPI認証で使われるトークンの中身を瞬時に確認できます。

JWT デコーダー

// JWT デコーダーの機能と特徴

JWTとは

JWT(JSON Web Token)は、RFC 7519で定義されたコンパクトなトークン形式です。ヘッダー・ペイロード・署名の3パートをドット(.)で連結した文字列で、Base64URLエンコードされています。OAuth 2.0やOpenID Connectなどの認証・認可プロトコルで広く使われています。

JWTの構造

JWTは「xxxxx.yyyyy.zzzzz」の形式で、最初のパート(Header)はアルゴリズムとトークンタイプ、2番目(Payload)はクレーム(ユーザー情報や有効期限など)、3番目(Signature)は改ざん検知用の署名です。HeaderとPayloadはBase64URLエンコードされたJSONで、デコードすることで内容を確認できます。

署名アルゴリズムの種類

JWTの署名には主にHS256(HMAC-SHA256)、RS256(RSA-SHA256)、ES256(ECDSA-SHA256)が使われます。HS256は共通鍵方式で実装が簡単、RS256/ES256は公開鍵方式でトークン検証に秘密鍵が不要という特徴があります。

セキュリティ上の注意点

JWTのPayloadはBase64URLエンコードされているだけで暗号化されていないため、機密情報(パスワードや個人情報など)をPayloadに含めないでください。また、algをnoneに設定するアルゴリズムなし攻撃にも注意が必要です。本番環境では必ず署名を検証してください。

// JWT デコーダーに関するよくある質問

JWTデコーダーとは何ですか?
JWT(JSON Web Token)の内容を人間が読める形式に変換するツールです。Base64URLエンコードされたHeader(ヘッダー)とPayload(ペイロード)をデコードしてJSON形式で表示し、`exp`(有効期限)等のタイムスタンプは日時形式に自動変換します。OAuth・OpenID Connect・自社API認証のデバッグで頻繁に必要になります。
JWTの署名検証はできますか?
本ツールでは署名の検証は行いません。署名検証には秘密鍵(HS256)または公開鍵(RS256/ES256)が必要で、ブラウザ上で安全に扱うことが難しいためです。署名検証はサーバーサイドまたは公式SDK(jsonwebtoken・jose 等)で行ってください。本ツールは「中身を見る」用途に特化しています。
JWTのPayloadに機密情報を入れても安全ですか?
いいえ、安全ではありません。JWTのPayloadはBase64URLエンコードされているだけで暗号化されていないため、誰でもデコードして内容を読むことができます。パスワード・クレジットカード番号・APIシークレット等の機密データはPayloadに含めないでください。機密が必要な場合は JWE(暗号化JWT)を使うか、Opaqueトークン + サーバー側ストア方式を採用します。
expクレームの期限切れ警告はどのように判定していますか?
expクレームのUnixタイムスタンプ(秒)と現在時刻を比較し、現在時刻がexpの値を超えている場合に期限切れ警告を表示します。タイムゾーンはブラウザのローカル設定に基づきます。`nbf`(before this time, not valid)と `iat`(issued at)も同様に日時表示します。トークンが「いつ発行されあと何分有効か」をひと目で確認できます。
「alg: none」というJWTは何ですか?
署名アルゴリズム指定を `none` にしたJWTで、署名なしを意味します。歴史的に脆弱性として悪用されたケースがあり(攻撃者が任意のクレームを書いて署名なしで送信、サーバー側が検証をスキップ)、現代の検証ライブラリでは `alg: none` を明示的に拒否するのが標準です。本ツールでデコード時に `alg: none` が見えた場合は、署名検証が機能しているか確認してください。
Bearer トークン形式(`Bearer xxxx.yyy.zzz`)も貼り付けられますか?
Bearer プレフィックスを付けたまま貼り付けても、本ツールは自動的に「Bearer 」部分を除去してデコードします(実装によります)。動作しない場合は手動で `Bearer ` を削除して JWT 本体だけを貼り付けてください。Authorization ヘッダーの値からそのままコピー可能です。
公開鍵・秘密鍵はどう扱えばよいですか?
本ツールは鍵を一切取り扱いません。署名検証にはサーバー側で使っているのと同じ鍵が必要で、ブラウザ上で安全に処理する仕組みを設計するのが困難なため、機能を提供していません。Identity Provider(Auth0、Cognito、Keycloak等)の場合、JWKS エンドポイント(`/.well-known/jwks.json`)から公開鍵を取得して検証ライブラリで処理する流れになります。
HS256とRS256はどちらが安全?
用途で異なります。HS256は単一サーバー内で完結する簡易な認証に適し、共通鍵を全システムで共有する必要があるためマイクロサービスや外部公開には不向きです。RS256は公開鍵で署名を検証できるため、認証サーバーと API サーバーが分かれているマイクロサービス構成・外部公開APIに最適です。最近の OpenID Connect では ES256(楕円曲線、より高速)も人気です。
タイムスタンプは秒?ミリ秒?
JWT 標準では `exp`・`iat`・`nbf` は秒単位(Unix Timestamp / UTC基準)です。ミリ秒単位(JavaScript の `Date.now()` の戻り値)と間違えやすい点に注意してください。本ツールは秒単位として日時変換しています。もし「2055年」のように未来すぎる日付になっていれば、ミリ秒を秒として誤解している可能性が高いです。
データはサーバーに送信されますか?
いいえ、JWTのデコードはすべてブラウザ内のJavaScriptで完結します。本番環境のトークン・社内システムの認証情報・ユーザー個人情報を含むJWTもサーバーに送信されることなく安全に解析できます。

// JWT デコーダーの使い方

  1. JWTトークンを入力

    上部の入力欄にデコードしたいJWTトークン文字列を貼り付けます。`xxxxx.yyyyy.zzzzz` 形式のJWTを直接、または `Bearer xxxx.yyy.zzz` のような Authorization ヘッダー値をそのまま貼り付けても処理できます。

  2. デコード結果を確認

    Header・Payload・Signatureの3パートがリアルタイムでデコード表示されます。`exp`・`iat`・`nbf` などのタイムスタンプクレームは日時形式に自動変換され、有効期限切れの場合は警告が表示されます。

  3. 結果をコピー

    各セクションのCOPYボタンでデコード結果をクリップボードにコピーできます。デバッグログへの貼り付け、チーム共有用ドキュメントへの転載、JIRA等のチケットへの添付など、必要に応じて活用してください。

カテゴリ セキュリティ