JWT デコーダー / 検証ツール
JWT のヘッダーとペイロードをデコードし、署名を検証して、有効期限を確認できます。
JSON Web Token とは何か
JSON Web Token (JWT) は、一連のクレーム — 「これはユーザー 42 だ」「このトークンは正午に失効する」といった主張 — を、検証できる形でコンパクトに自己完結して運ぶ方法です。JWT は現代の認証のいたるところにあります: ログインすると、サーバーはしばしば署名済みの JWT をブラウザに渡し、以降のすべてのリクエストがそれを含めることで、サーバーは何も照会せずに相手が誰かを信頼できます。トークンが自分自身のクレームと署名を運ぶため、「ステートレス」と呼ばれます。
JWT はドットで結ばれた 3 つの Base64URL 符号化された部分です: header.payload.signature。このツールはそれらの部分を分割してデコードし、クレームを読みやすい形で示し、署名鍵を入力すれば署名が本物かどうかを検証します。
三つの部分
- ヘッダー: トークンがどう署名されているかを記述します。最も重要なのはアルゴリズム ("alg"、例えば HS256 や RS256) とトークンの種類です。
- ペイロード: クレームそのものです — sub (主体/ユーザー)、exp (失効)、iat (発行時刻) といった欄と、発行者が加えた任意のカスタムデータを持つ JSON オブジェクトです。
- 署名: シークレットまたは秘密鍵を使い、ヘッダーとペイロードにわたって計算された暗号的な値です。JWT を信頼できるものにするのはこれです: ペイロードを 1 文字変えれば、署名はもう一致しません。
重要なのは、ヘッダーとペイロードは符号化されているだけで、暗号化されていない点です。トークンを持つ者は誰でもそれらを読めます。署名は内容を隠すのではなく、改ざんされていないことを証明します。パスワードやシークレットを JWT のペイロードに入れてはいけません。
署名の検証
JWT をデコードすると何を主張しているかが分かり、検証するとその主張を信じてよいかが分かります。検証は、鍵を使ってヘッダーとペイロードから署名を計算し直し、一致するかを確認します。アルゴリズムには 2 つの系統があり、それぞれ別の種類の鍵を使います:
- HMAC (HS256、HS384、HS512): 対称方式です。同じ共有シークレットが署名と検証の両方を行います。検証するにはそのシークレットを入力してください。
- RSA と ECDSA (RS256、PS256、ES256 など): 非対称方式です。秘密鍵が署名し、公開鍵が検証します。検証するには PEM 形式の公開鍵を入力してください — トークンを確認するだけなら秘密鍵は一切不要です。
このツールはヘッダーからアルゴリズムを自動で判別し、Web Crypto API を使って完全にブラウザ内で検証するため、トークンも鍵もアップロードされることはありません。
標準クレームの読み方
いくつかのクレーム名は標準化されています (「登録済みクレーム」と呼ばれます)。このツールはそれらにラベルを付け、時刻に基づくものを生の Unix タイムスタンプからお使いのローカル時刻に変換し、平易な状態表示を添えるので、トークンが有効か・期限切れか・まだ有効でないかがひと目で分かります:
- exp — 失効時刻: この時点を過ぎたらトークンは拒否されるべきです。
- nbf — 有効開始: この時点までトークンは無効です。
- iat — 発行時刻: トークンが作られた時刻です。
- iss — 発行者: トークンを作った者です。
- sub — 主体: トークンが誰・何についてのものか (多くはユーザー ID) です。
- aud — 対象者: トークンが誰に向けられているかです。
- jti — トークンの一意な識別子です。
よくある質問
- 私のトークンや鍵はどこかに送られますか?
- いいえ。デコードと署名検証は Web Crypto API を使って完全にブラウザ内で動きます。トークン・シークレット・公開鍵が端末の外に出ることはないため、本番のトークンでも安全に調べられます。
- どの署名アルゴリズムを検証できますか?
- 共有シークレットを使う HMAC (HS256、HS384、HS512) と、PEM 形式の公開鍵を使う RSA (RS・PS の変種) および ECDSA (ES256、ES384) です。アルゴリズムはトークンのヘッダーから自動的に判別されます。
- JWT は暗号化されていますか?
- いいえ。標準の署名済み JWT は符号化されているだけで、暗号化されていません — 誰でもヘッダーとペイロードを読めます。署名はトークンが改変されていないことを証明しますが、内容を隠しはしないため、ペイロードにシークレットを保存してはいけません。
- RS256 トークンの検証に秘密鍵は必要ですか?
- いいえ。非対称アルゴリズムは公開鍵で検証します。秘密鍵が必要なのはトークンを作る (署名する) ときだけで、確認するときには決して必要ありません。
- トークンが期限切れと表示されるのはなぜですか?
- exp クレームが端末の時計を基準に過去になっているためです。このツールは exp・nbf・iat をローカル時刻に変換し、状態を示すので、トークンの有効期間をひと目で確認できます。
- HS256 と RS256 の違いは何ですか?
- HS256 は対称です: 一つの共有シークレットが署名と検証の両方を行い、同じ当事者が両方を担うときに最も簡単です。RS256 は非対称です: 秘密鍵が署名し公開鍵が検証するので、多くの当事者が偽造できないままトークンを検証できます。
- ペイロードを編集してトークンに署名し直せますか?
- このツールは読み取り専用です: デコードと検証は行いますが、トークンの作成や再署名はしません。それにより用途を絞り、秘密の署名鍵を扱わずに済みます。