ツール

無料オンラインJWTデコーダー

JSON Web Tokenをブラウザ内で直接デコードして解析します。ヘッダー、ペイロード、クレームを読みやすい有効期限とともに表示します。データがサーバーに送信されることは一切ありません。

トークンインスペクター

アルゴリズム
タイプ
有効期限

ヘッダー

ペイロード

署名

署名の検証にはシークレットキーが必要であり、本ツールではサポートされていません。
デコード処理はすべてブラウザ内でローカルに行われます。トークンがアップロード、保存、記録されることはありません。

JWTとは?

JSON Web Token(JWT、RFC 7519)は、当事者間でクレームを表現するためのコンパクトでURLセーフな方式です。ヘッダー.ペイロード.署名という、ドットで結合された3つのBase64URLエンコード部分で構成されています。最も一般的な用途はREST APIのステートレス認証で、ログイン後にサーバーが署名済みトークンを発行し、クライアントは各リクエストでそれを送信することで、サーバーはセッション状態を保持せずに本人確認を行えます。

JWTの構造:ヘッダー・ペイロード・署名

ヘッダー

署名アルゴリズム(alg、例:HS256、RS256、ES256)とトークンタイプ(typ、ほとんどの場合JWT)を宣言します。

ペイロード

標準クレームとカスタムクレームを格納します。Base64URLエンコードされているだけで暗号化されていないため、誰でも読み取ることができます。機密情報を保存しないでください。

署名

エンコードされたヘッダーとペイロードを、シークレットキーまたは秘密鍵で署名して計算されます。整合性を証明しますが、その鍵がなければ検証できません。

一般的なJWTクレームの解説

ペイロードにはクレーム(トークンに関する記述)が含まれます。これらの登録済みクレームはJWT標準で定義されています。

sub Subject(サブジェクト)— トークンの主体、通常はユーザーIDです。
iss Issuer(発行者)— トークンを発行した主体を識別します。
aud Audience(対象者)— トークンが意図する受信者です。
exp Expiration Time(有効期限)— この時刻以降はトークンを拒否しなければならないUnixタイムスタンプです。
iat Issued At(発行日時)— トークンが作成されたUnixタイムスタンプです。
nbf Not Before(有効開始)— これより前にはトークンを受け付けてはならないUnixタイムスタンプです。
jti JWT ID — トークンのリプレイ防止に役立つ一意の識別子です。

JWTセキュリティのベストプラクティス

ペイロードには機密データを絶対に入れないでください。エンコードされているだけで暗号化されておらず、誰でも読み取れます。
必ずexpクレームを設定し、トークンの有効期間を短くして、漏洩時の影響を最小限に抑えましょう。
マイクロサービスでは非対称アルゴリズム(RS256またはES256)を優先し、シークレットを共有せずに検証できるようにしましょう。
issとaudクレームは必ずサーバー側で検証し、algがnoneに設定されたトークンは拒否してください。
トークンをURLやログファイルに露出させず、Authorizationヘッダーで送信し、安全に保管してください。

よくある質問

いいえ。標準的なJWTは署名されているだけで、暗号化されていません。ヘッダーとペイロードはBase64URLエンコードされているだけなので、トークンを持っている人なら誰でもデコードして内容を読み取れます。署名はトークンが改ざんされていないことを保証するだけで、データを隠すものではありません。機密性が必要な場合はJWE(JSON Web Encryption)を使用するか、ペイロードに機密データを入れないようにしてください。

いいえ。JWT署名の検証には、シークレットキー(HS256の場合)または公開鍵(RS256/ES256の場合)が必要で、これらは発行元のサーバーのみが保持すべきものです。本ツールは意図的に検証を行わずクライアント側でトークンをデコードするだけなので、鍵がお使いの端末から外部に出ることはありません。署名の検証は必ずサーバー側で行い、ブラウザでは行わないでください。

HS256は対称方式で、同じシークレットキーでトークンの署名と検証を行うため、検証できる当事者は誰でもトークンを偽造できます。RS256は非対称方式で、秘密鍵で署名し、別の公開鍵で検証します。公開鍵は自由に共有しつつ、署名用の秘密鍵は秘匿できるため、RS256は分散システムやマイクロサービスで推奨されます。

expクレームは秒単位のUnixタイムスタンプです。よくあるバグは、秒(10桁)ではなくミリ秒(13桁)で指定してしまうことで、有効期限が大幅に過去または未来にずれてしまいます。サーバー間の時刻のずれ(クロックスキュー)も早期期限切れの原因になり得るため、検証時には多少の許容範囲を設けましょう。上記のトークンインスペクターで、生の値の横に人が読める形式の有効期限を確認できます。