JWTデコード:ヘッダー・ペイロード・有効期限を確認
このJWT解析ツールは、JSONウェブトークンをヘッダーとペイロードに分けて、貼り付けた瞬間に整形済みのJSONで表示します。expなどのタイムスタンプには読みやすい現地の日時を並べて表示し、期限切れかどうかをバッジで知らせます。署名の検証は任意です。トークンはブラウザの中で読み取られ、アップロードされません。
JWTデコード方法:貼り付けるだけ
- トークンをJSONウェブトークンの欄に貼り付けてください。ヘッダーとペイロードがすぐに表示されます。デコードボタンを押す必要はありません。
- 結果の上のバッジで状態を確認してください。期限切れ、まだ有効ではない、有効期限なしのどれか、そして署名の状態がわかります。
- ヘッダーをコピーまたはペイロードをコピーを押すと、そのブロックをそのままのJSONでコピーできます。日時の注記はコピーに含まれません。
- 消去を押すと欄が空になり、別のトークンを試せます。
JWTデコーダーに貼り付けるトークンは、受け取ったままで大丈夫です。先頭のAuthorization: Bearer、前後の引用符、改行は自動で取り除かれるので、リクエストヘッダーやログの1行、JSONレスポンスからそのままコピーできます。入力欄は最大100,000文字まで受け付けます。クレーム内の大きな数値や日本語などの文字も正確に表示され、長い値は折り返されます。
JWT中身確認:ヘッダーとペイロードの見方
JWTは、ドットでつながった3つのbase64url部分(header.payload.signature)でできています。最初の2つは符号化されただけのJSONなので、シークレットがなくてもJWTの中身は読めます。よく見るクレームは次のとおりです。
iss:発行者(トークンを作った側)sub:主体(トークンが誰についてのものか)aud:対象者(トークンの宛先)exp:有効期限nbf:この時刻より前は無効iat:発行時刻jti:トークン固有のID
ヘッダーには通常、alg(署名アルゴリズム)とtypが入り、署名に使った鍵のIDであるkidが入ることもあります。
JWT有効期限確認:expを日時で読む
exp、iat、nbf、auth_timeは秒単位のUnixタイムスタンプです。このツールは、それぞれの数値の横に現地の日時を書き添えるので、自分で変換する必要はありません。結果の上のバッジは、お使いの端末の時計を基準にしています。
expクレームから、期限切れになってからの経過時間、または期限までの残り時間を表示します。expがない場合は、有効期限なし: このトークンにはexpクレームがありませんと表示します。nbfがまだ未来の場合は、まだ有効ではないトークンとして表示します。
JWT署名検証:シークレットと公開鍵を使う
デコードでわかるのはトークンの内容までです。改ざんされていないことを確かめられるのは署名だけです。結果の下にある署名を検証する(任意)を使います。アルゴリズムは、トークンのalgを読み取る自動判定のままでも、自分で選んでもかまいません。選べるのは、HS256、HS384、HS512、RS256、RS384、RS512、PS256、PS384、PS512、ES256、ES384、ES512、EdDSAです。そのうえで、シークレットまたは公開鍵の欄に鍵を貼り付けてください。
- HS系アルゴリズムには、ふつうのシークレット。入力したとおりに使われ、先にbase64デコードされることはありません。
- PEM形式の公開鍵(
-----BEGIN PUBLIC KEY-----)、またはPKCS#1形式のRSA公開鍵 - X.509証明書
- JWK、またはJWKS全体。この場合は、トークンの
kidに合う鍵が選ばれます。
バッジは署名は有効ですまたは署名は無効ですに変わります。鍵がないときは署名は未検証ですのままです。algがnoneのトークンには署名なし: このトークンは署名されていませんと表示されます。秘密鍵を貼り付けると、ツールはそれを受け付けず、公開鍵を求めます。検証に必要なのは公開鍵だけです。確認にはブラウザ標準のWebCryptoを使い、EdDSAは新しいブラウザが必要です。
JWTトークン解析でエラーが出るとき
エラーは入力欄の下に表示され、問題のある部分を示します。
- テキストが2つのドットで区切られた3つの部分になっていません。メッセージには、見つかった部分の数が表示されます。
- ヘッダー、ペイロード、署名のどれかが正しいbase64urlではありません。コピー時に文字が欠けていることがよくあります。
- ヘッダーまたはペイロードが、正しいUTF-8テキストではない、または正しいJSONではありません。
- 5つの部分があるトークンは、暗号化されたJWEです。判別して説明は表示しますが、秘密鍵がないと読めません。
トークンを貼り付けても安全ですか?
トークンと鍵のデコードと確認は、すべてお使いの端末の中で行われます。アップロードも保存もされず、アカウントも要りません。ただし、有効なアクセストークンは認証情報そのものです。できるだけ、期限切れのトークンやテスト用のトークンをお使いください。
このツールはトークンの読み取りと確認だけを行います。JWTの作成や署名、JWEの復号はできません。
よくある質問
シークレットなしでJWTをデコードできますか?
できます。JWTのヘッダーとペイロードはbase64urlで符号化されているだけで、暗号化されていません。そのため、トークンを持っていれば誰でも読めます。「JSONウェブトークン」の欄に貼り付けると、両方がすぐに表示されます。シークレットや公開鍵が必要なのは署名の確認だけで、ここでは任意です。
JWTが期限切れかどうかを確認するには?
トークンを貼り付けて、結果の上のバッジを見てください。expクレームをもとに、期限切れになってからの経過時間、または残り時間が表示されます。expがないトークンには「有効期限なし: このトークンにはexpクレームがありません」と表示され、nbfがまだ未来のトークンは、まだ有効ではないと表示されます。
JWTのexpの値を日時に変換するには?
変換する必要はありません。expは秒単位のUnixタイムスタンプで、このツールは対応する現地の日時を「ペイロード」ブロックの数値の横に表示します。iat、nbf、auth_timeも同じように表示されます。
公開鍵でJWTの署名を検証するには?
「署名を検証する(任意)」で「アルゴリズム」を自動判定のままにするか、トークンが使うものを選び、「シークレットまたは公開鍵」に公開鍵を貼り付けてください。PEM形式の鍵(-----BEGIN PUBLIC KEY-----)、RSA PUBLIC KEY、X.509証明書、JWK、JWKSのどれでも使えます。バッジは「署名は有効です」または「署名は無効です」に変わります。
JWTトークンデコードをサーバーに送らず端末内で行えますか?
はい、このツールはそのように動作します。トークンの分割、デコード、確認はすべてブラウザの中で行われ、アップロードも保存もされません。署名の確認にはブラウザ標準のWebCryptoを使うため、トークンも鍵もどこにも送信されません。
JWTのヘッダーとペイロードには何が入っていますか?
ヘッダーはトークン自体の説明で、通常は署名アルゴリズム(alg)と種類(typ)、場合によっては鍵のID(kid)が入ります。ペイロードにはクレームが入り、発行者(iss)、対象となる主体(sub)、宛先(aud)、有効期限(exp)などがあります。どちらもJSONのまま、「ヘッダー」と「ペイロード」のブロックに表示されます。
JWTのalgがnoneとはどういう意味ですか?
トークン自身が署名なしだと宣言している状態です。署名部分は空で、確認するものがありません。このツールは「署名なし: このトークンは署名されていません」と表示します。サーバーは、このようなトークンを本人確認の証拠として受け入れてはいけません。
bearerトークンデコードはどうすればいいですか?
JWTであれば、そのまま貼り付けてください。先頭のAuthorization: Bearer、前後の引用符、改行は自動で取り除かれるので、リクエストヘッダーやログから直接コピーできます。ドットで区切られた3つの部分になっていない不透明なbearerトークンはデコードできません。その場合は、見つかった部分の数が表示されます。
暗号化されたJWEの復号や、JWTの作成・署名はできますか?
できません。5つの部分があるトークンはJWEで、中身は暗号化されているため、秘密鍵がないと読めません。ツールはそれを判別して、エラーではなく説明を表示します。トークンの生成、署名、編集もできず、読み取りと確認だけを行います。
おすすめ
-
暗号技術入門 第3版署名に使われるHMACやRSAの仕組みを基礎から学べて、JWTの検証がなぜ成り立つのかが分かります。
-
Webを支える技術Bearerトークンや認証ヘッダーなど、Web APIの土台になるHTTPの仕組みを一冊で押さえられます。
-
ロジクール MX ANYWHERE 3S ワイヤレスマウス小さくて持ち運びやすいマウスなので、認証まわりのデバッグ作業をどこでも快適に進められます。
無料でツールを続ける支えになります。✨
画像はイメージです。 Amazonのアソシエイトとして、Capsule Toolsは適格販売により収入を得ています。