本文へスキップ

JWTデコーダーベータ

JWT(JSON Web Token)を貼り付けるだけでheaderとpayloadを確認できます。署名は検証せず、すべての処理はブラウザ内で完結します。

署名は未検証

このツールは内容を読むだけで、署名は検証しません。本番環境で使うトークンや信頼できない秘密鍵はここに貼り付けないでください。

JWTを貼り付けるとheaderとpayloadが解析されます。

使い方

入力欄にJWT文字列を貼り付けると、headerとpayloadがそれぞれ整形されたJSONとして表示されます。署名アルゴリズム、登録済みクレーム(exp・iat・nbf)の実際の日時、そして有効期限が切れているかどうかも合わせて確認できます。headerやpayloadの結果はコピーボタンでそのまま取得できます。入力した内容はどこにも送信されず、このブラウザの中だけで処理されます。

JWTの3つの部分

JWTはドット(.)で区切られた3つの部分(header.payload.signature)で構成されています。headerには署名アルゴリズム(alg)やトークンの種類(typ)などのメタデータが、payloadにはユーザーIDや権限、有効期限といった実際のクレームが入っています。この2つの部分は暗号化ではなく単にBase64URLでエンコードされたJSONにすぎないため、誰でもデコードして内容を読むことができます。最後のsignature部分だけが秘密鍵(または秘密鍵のペアとなる鍵)で署名されており、headerとpayloadが発行後に改ざんされていないことを確認するために使われます。

デコードと検証は別物です

このツールはheaderとpayloadを読み取って表示するだけで、signature部分は検証しません。署名を検証するには、そのトークンを発行したサーバーが持つ秘密鍵(HMAC系アルゴリズムの場合)または公開鍵(RSA・ECDSA系アルゴリズムの場合)が必要ですが、このツールはそうした鍵を受け取ることも、ブラウザの外と通信することもありません。そのため、画面に内容が正しく表示されたからといって、そのトークンが本物である、あるいはまだ有効であるとは限りません。本番環境で使うトークンや信頼できない秘密鍵は、このツールを含めどんなオンラインツールにも貼り付けないようにしてください。

登録済みクレーム(exp、iat、nbf)

JWTの標準(RFC 7519)では、exp(有効期限)、iat(発行時刻)、nbf(有効開始時刻)といったいくつかのクレーム名があらかじめ決められています。これらの値はすべて1970年1月1日から経過した秒数を表す数値(NumericDate)です。このツールはこの値を利用者のロケールに合わせた日時に変換して表示し、現在時刻と比較してexpが過ぎていれば「期限切れ」、nbfがまだ過ぎていなければ「まだ有効ではありません」と表示します。ただしこの判定はあくまで画面表示用の参考情報であり、実際のアクセス制御は必ずサーバー側の検証を経る必要があります。

プライバシー

貼り付けたトークンとそのデコード結果は、このブラウザの中だけで計算され、サーバーには送信されません。ただし、JWTのpayloadはもともと暗号化されていないため、このツールを使わなくてもメールアドレスや権限、内部IDなどの情報は誰でも読み取れる点を覚えておいてください。

参考資料

よくある質問

JWTをデコードすると署名も確認されるのですか?

いいえ。デコードはBase64URLでエンコードされたheaderとpayloadを読める形に戻すだけです。署名が本物かどうかを確かめるには発行者の秘密鍵(または公開鍵)が必要で、このツールには検証機能自体がなく、秘密鍵を受け取ることもありません。

headerのalgが「none」になっているトークンを見つけました。危険ですか?

はい、非常に危険です。algがnoneだと署名なしで誰でも好きな内容のトークンを作れてしまうため、サーバーがそれをそのまま信頼すると認証を突破される可能性があります。サーバー側でalg noneを明示的に拒否しているか確認してください。

exp(有効期限)が過ぎたトークンを入力すると、このツールが止めてくれますか?

いいえ。このツールは有効期限が切れているかどうかを画面に表示するだけで、実際にそのトークンをブロックしたり無効化したりはしません。期限切れトークンの拒否は、そのトークンを使うサーバー側の検証処理で行う必要があります。

デコードしたトークンを他の人と共有しても大丈夫ですか?

おすすめしません。JWTのpayloadは暗号化されておらずBase64URLでエンコードされているだけなので、このツールがなくても誰でもそのまま読めます。メールアドレスやユーザーIDなどの個人情報や内部の権限情報が含まれていれば、それも一緒に共有してしまうことになります。