デコードは中身を読むだけで、正しい鍵で署名を検証するまでトークンは検証済みではありません。
JWTデコーダーは、JSON Web Tokenをヘッダー・ペイロード・署名に分け、クレームを読みやすいJSONで表示します。exp・iat・nbfはローカル日時に変換されます。HS・RS・PS・ES系の署名検証と、HS256でのトークン作成にも対応。処理はすべてブラウザのWeb Crypto APIで行います。
使い方
- JWTを貼り付けると、ヘッダー・ペイロード・署名が色分けされてデコードされます。
- クレームを確認:exp・iat・nbfはローカル時刻と「3時間後」「2日前」のような相対時間で表示されます。
- 署名を検証するには、シークレット(HS256/384/512)を入力するか、公開鍵をPEM・X.509証明書・JWKで貼り付けます(RS・PS・ESアルゴリズム)。
- ヘッダーやペイロードをタップすると、整形済みJSONとしてコピーできます。
- 「作成」に切り替えると、任意のペイロードとシークレットで新しいHS256/384/512トークンに署名できます。
- データはブラウザの外に出ません。デコードと検証はブラウザ内蔵のWeb Crypto APIで行い、トークンや鍵が保存・送信されることはありません。
- JWTは誰でもデコードできます。ペイロードはBase64URLでエンコードされているだけで、暗号化されていません。秘密情報を入れないでください。
- alg が「none」のトークンには署名がありません。サーバーは必ず拒否すべきです。
- 対応アルゴリズム:HS256、HS384、HS512、RS256、RS384、RS512、PS256、PS384、PS512、ES256、ES384、ES512。JWKS({"keys": […]})にも対応し、kidで鍵を選びます。
- シークレットがBase64で保存されている場合は「Base64シークレット」をオンにしてください。
JWTの構造
JWT(RFC 7519)は、Base64URLでエンコードした3つの文字列をドットでつないだものです(ヘッダー.ペイロード.署名)。ヘッダーには {"alg":"HS256","typ":"JWT"} のようにアルゴリズムが入ります。ペイロードには sub(主体)、iss(発行者)、aud(対象者)、exp(有効期限)、iat(発行日時)、nbf(有効開始)などのクレームが入ります。日時は1970年1月1日UTCからの秒数で、exp 1767225600 は2026年1月1日0時(UTC)です。
署名は前の2つの部分に対して計算されます。HS256は共有シークレットによるHMAC-SHA256、RS256とPS256はRSA署名、ES256はP-256曲線のECDSA署名です(RFC 7518)。
デコードと検証は別物
Base64URLは暗号化ではなく単なるエンコードなので、JWTの中身は誰でも読めます。ペイロードにパスワードや個人情報を入れてはいけません。トークンを信頼してよいのは、正しい鍵で署名を検証でき、expとnbfの期間内であるときだけです。alg が none のトークンには署名がなく、サーバー側で拒否する必要があります。HS256のシークレットは32バイト以上のランダム値が目安です。
使える鍵の形式
HS256・HS384・HS512では共有シークレットを入力します(テキストまたはBase64)。RS・PS・ES系では公開鍵をPEM、X.509証明書、JWK、またはJWKSごと貼り付けられます。JWKSの場合はヘッダーのkidで鍵を選びます。トークンや鍵は保存も送信もされません。
よくある質問
ここにJWTを貼り付けても安全ですか?
はい。デコードと検証はブラウザ内で行われ、トークンは送信も保存もされません。ただし本番のトークンはパスワードと同じように扱い、できれば期限切れやテスト用のものを使ってください。
シークレットがなくてもJWTはデコードできますか?
できます。ヘッダーとペイロードはBase64URLでエンコードされているだけなので、誰でも読めます。シークレットや公開鍵が必要なのは署名を検証するときだけです。
JWTの有効期限(expクレーム)とは何ですか?
expは有効期限で、1970年1月1日UTCからの秒数で表します。この時刻を過ぎたトークンは拒否しなければなりません。このツールではローカル時刻と「2日前に期限切れ」のような表示で確認できます。
HS256とRS256の違いは?
HS256は発行側と検証側が同じシークレットを共有して署名します。RS256はRSAの秘密鍵で署名し公開鍵で検証するため、検証側が署名用の鍵を持つ必要がありません。
署名の検証に失敗するのはなぜですか?
多いのは、シークレットの誤りやBase64のまま入力しているケース、kidと公開鍵が合っていないケース、署名後にトークンが変更されたケースです。シークレットがBase64で保存されている場合は「Base64シークレット」をオンにしてください。
ここでJWTを作成できますか?
はい。作成タブで、ペイロードとシークレットからHS256・HS384・HS512のトークンに署名できます。RSAやECの署名は秘密鍵が必要なため対応していません。