ToolActToolAct

JWT 生成器

JSON Web Tokenを作成、HeaderとPayloadをカスタマイズ

HEADERJWTヘッダー設定
SECRET署名キー
PAYLOADJWTペイロード設定
クイック追加:
生成されたJWT Token
上のボタンをクリックしてJWT Tokenを生成

JWTとは?

JWT (JSON Web Token) は、当事者間で安全に情報を送信するためのオープン標準 (RFC 7519) です。JWTは3つの部分で構成され、ドットで区切られます:Header(ヘッダー)、Payload(ペイロード)、Signature(署名)。JWTは認証と情報交換シーンで広く使用されています。 セキュリティに関わる結果は単独で判断せず、鍵、文脈、アルゴリズム、信頼できる取得元を合わせて確認する必要があります。

使い方

JWT生成フロー

  1. 署名アルゴリズムを選択してください(デフォルトはHS256)
  2. 署名シークレットを入力するか「生成」をクリックしてください
  3. Payload JSONを編集し、クイック追加ボタンで標準クレームを追加できます
  4. issued at(iat)と有効期限(exp)の時刻を設定してください
  5. 「JWT Token生成」ボタンをクリックしてください
  6. 生成されたTokenをコピーしてテストや開発に利用できます

トークンのセキュリティ

  • HMACアルゴリズムでは強力なシークレットを使用し、RSA/ECDSAアルゴリズムでは秘密鍵を適切に保護してください。
  • 現実的なexp、iat、issuer、audienceクレームを設定してください。構文的に正しいJWTでも安全でなかったり、サービスに拒否される可能性があります。

利用シーン

ローカルサービス向けの短命テストトークンを作成するHS256、HS384、HS512を選択し、共有シークレット(RFC 7518では32バイト以上推奨)を設定し、有効期限プリセットを1時間/24時間/7日/30日に調整して、開発APIやミドルウェアテスト用の完全なJWTを生成します。ヘッダー、ペイロード、署名、最終トークンが別々に表示されるため、各パートが必要な場所にコピーできます。HMACキーはブラウザタブの外に出ません。
認証フローのクレーム組み合わせをモデル化するペイロードエディタとクイッククレームボタンで、Unixタイムスタンプを覚えることなくsub(サブジェクト)、iss(発行者)、aud(受信者)、jti(JWT ID)、iat(発行時刻)、exp(有効期限)の値を簡単に追加できます。日付入力はiatとexpに紐付いているため、クロックスキュー、nbfウィンドウ、リフレッシュトークンローテーションフロー周辺のエッジケースを再現する際に便利です。
バックエンドなしで隔離されたデモトークンを生成するドキュメント、フロントエンドプロトタイプ、QAスクリプトでHMAC署名のサンプルトークンだけが必要な場合、このツールはランダムな英数字シークレットを作成し、すべてをWeb Cryptoでローカル署名します。秘密鍵による本番署名ではなく対称アルゴリズムに意図的に特化しており、署名シークレットはローカルタブ内に留まり、ネットワークエンドポイントに到達することはありません。
alg=none と未署名トークンの挙動を再現アルゴリズムのドロップダウンを 'none' に切り替えると、明示的に未署名トークンを受け入れるクライアント向けの JWT を生成できます。ヘッダーは alg と typ を別々に表示するので、本番エンドポイントに送る前に下流ライブラリが署名欠落や想定外のアルゴリズムにどう反応するかを確認できます。
ヘッダーとペイロードを単独のJSONとしてエクスポートするヘッダーまたはペイロードだけをcurlリクエスト、Postman環境変数、テストフィクスチャにコピーします。API実験中に1つのクレームを調整するたびに新しいトークンに署名する必要がなくなるため、特にスコープ、ロール、テナントフィールドをタイトなフィードバックループで反復する際に便利です。

仕組み

JWT のジェネレーターとパーサーは逆方向の処理です:パーサーは 3 つの部分に分割し、ジェネレーターはそれらを組み立てます。中核は Signature セグメントの計算です。 組み立てフロー:1) Header JSON を構築、例 {"alg":"HS256","typ":"JWT"};2) 標準クレームとプライベートクレームを含む Payload JSON を構築;3) Header と Payload をそれぞれ Base64URL でエンコードし、h_b64 と p_b64 を得る;4) h_b64 と p_b64 をピリオドで結合し input = h_b64 + '.' + p_b64 とする;5) alg に応じて署名を計算:HMAC-SHA256/384/512(secret, input);6) 署名結果を Base64URL でエンコード;7) 最終トークンは input + '.' + sig_b64。 HMAC-SHA256 署名:secret を鍵として(推奨 32 バイト以上)input に HMAC を適用します。内部では SHA-256 を 2 ラウンド実行:secret から ipad/opad を導出し、SHA256(secret XOR ipad || msg) XOR opad を計算します。 鍵強度:secret の長さが安全性を決めます。RFC 7518 は HS256 の鍵を 256 ビット(32 バイト)以上と規定しています。本番環境では暗号論的に安全な乱数源(例:crypto.randomBytes)を必ず使い、「secret」「password」「123456」のような文字列は使わないでください。 よくある落とし穴:1) alg すり替え攻撃:サーバーは alg を厳密に検証し、トークンのヘッダーから alg を読み取って対応するアルゴリズムにディスパッチしてはいけません;2) 弱い鍵:短すぎる secret は総当たりされます;3) ペイロード改ざん:HMAC が完全性を保証するため、攻撃者がペイロードを書き換えるとサーバー側の検証が失敗します;4) トークン漏洩:JWT は失効できないため、流出したら exp まで待つしかありません。 本ツールの範囲:HS256/HS384/HS512 のみを生成します。RS256(RSA)や ES256(ECDSA)などの非対称アルゴリズムは発行者側で秘密鍵を保管する必要があり、バックエンドの署名サービスや専用 SDK が担当します。本ページでは生成しません。

  • HMAC-SHA256署名コア:HMAC(secret, header_b64 + '.' + payload_b64)で256ビットの署名を出力し、Base64URLエンコードします。
  • HS256のキー長は>= 32バイト(256ビット)が必要です。crypto.getRandomValuesまたはcrypto.randomBytesでの生成を推奨し、短いキーは辞書攻撃に対して脆弱です。
  • 本ツールは HMAC 系列の署名(HS256/HS384/HS512)のみを生成します。RS256 や ES256 などの非対称アルゴリズムは発行者側で秘密鍵を保管する必要があり、本ツールでは生成しません——この種のトークンが必要な場合はバックエンドの署名サービスや専用 SDK を利用してください。
  • iat/exp/nbfはすべてUnixタイムスタンプ(秒単位、ミリ秒ではありません)。サーバーは通常exp > now()、nbf <= now()、iat <= now()を要求します。
  • alg=none攻撃:許可されたアルゴリズムのホワイトリストをサーバー側で維持し(例:['HS256'])、トークンヘッダーからアルゴリズムを動的に選択しないでください。多くのJWTライブラリは歴史的にデフォルトでalg=noneを許可しており、これは既知の脆弱性です。
  • JWTは発行すると失効できません。唯一の手段はexpを待つことです。能動的な失効にはjtiブラックリストを維持するか、短命のアクセストークンとリフレッシュトークンの組み合わせを使用してください。

使用例

基本的な HS256 の例

Header:  {"alg":"HS256","typ":"JWT"}
Payload: {"sub":"user-123","name":"Alice","role":"admin","iat":1705312800,"exp":1705399200}
Secret:  my-super-secret-key-32-bytes-long

Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyLTEyMyIsIm5hbWUiOiJBbGljZSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTcwNTMxMjgwMCwiZXhwIjoxNzA1Mzk5MjAwfQ.7Hk2L9oP3qR1mN4vK8xJ2wE5yT6sB0fA9cZ1dG3hI4U

iat と exp による独自の有効期限

Header:  {"alg":"HS256","typ":"JWT"}
Payload: {"iss":"https://auth.example.com","sub":"user-456","aud":"api.example.com","iat":1705312800,"exp":1705316400}
Secret:  another-strong-secret-32-bytes-long

ヘッダーとペイロードを Base64URL でエンコードし、ドットで結合した文字列に共有 secret を使って HMAC-SHA256 を適用します。Token 欄には Authorization ヘッダーへそのまま貼り付け可能な 3 セグメントの最終文字列が表示されます。

カスタムクレーム

Header: {"alg":"HS256","typ":"JWT"}
Payload: {
  "sub": "user-789",
  "name": "Bob",
  "role": "editor",
  "tenant": "acme-corp",
  "permissions": ["read:docs", "write:docs"],
  "scope": "docs.read docs.write",
  "iat": 1705312800,
  "exp": 1705399200,
  "jti": "550e8400-e29b-41d4-a716-446655440000"
}

よくある質問

JWT はローカルで生成されますか?

はい。ヘッダー、ペイロード、署名は Web Crypto API を使用してブラウザ内で計算されます。署名用の秘密鍵や秘密鍵がページから出ることはありません。ただしトークン自体は実サービスに貼り付ければログに残ったり露出したりするデータとして扱ってください。

どの署名アルゴリズムがサポートされていますか?

本ツールは HS256/HS384/HS512(共有シークレットによる HMAC)を生成します。RS256/RS384/RS512(RSA)や ES256/ES384/ES512(ECDSA)などの非対称アルゴリズムは本ツールでは生成しません——検証側がそれらを要求する場合はバックエンドの署名サービスや専用 SDK を使用してください。本番では alg=none を避けてください。まともな検証実装は未署名トークンを拒否します。

ペイロードには何を入れますか?

sub、iss、aud、exp、iat、nbf などの標準クレームに加え、サービスで使用するカスタムクレームを入れます。ペイロードは小さく保ちましょう。JWT はヘッダーで送られ、リクエストごとに肥大化します。パスワード、完全なクレジットカード番号、その他の秘密情報は決して入れないでください。ペイロードは Base64URL であって暗号化されていません。

有効期限はどう設定しますか?

exp に、トークンが有効でなくなるべき Unix タイムスタンプ (ミリ秒ではなく秒) を設定します。exp なしのトークンは技術的には合法ですが、ほとんどの本番サービスは必須としています。一般的な値はアクセストークンで 5〜60 分、リフレッシュトークンで 7〜30 日です。

生成した JWT が検証に失敗するのはなぜですか?

よくある原因は、ヘッダーの alg が検証側の期待と一致しない、秘密鍵/鍵が異なる、ペイロードクレーム (iss、aud) がサーバー設定と一致しない、発行者と検証側のクロックスキューが許容範囲 (通常 ±60 秒) を超えている、手動編集で Base64URL エンコーディングが壊れた (改行を入れないこと) などです。

私の秘密鍵はサーバーに送信されますか?

いいえ。署名は完全に Web Crypto を使用してブラウザ内で行われます。とはいえ、本番の署名鍵をどんな Web ツールにも決して貼り付けないでください。本番外の鍵でテストし、その後実際のバックエンドで署名してください。

HS256 と RS256 のどちらを使うべきですか?

HS256 は両者で秘密鍵を共有する必要があるため、同じサービスがトークンを発行・検証する状況にしか向きません。RS256 (または ES256) は発行者が秘密鍵を保持し、各消費者が公開鍵で検証できるようにします。OAuth/OIDC やマルチサービスアーキテクチャには適切な選択肢です。 本ツールは HS 系のトークンのみを生成します。RS256/ES256 が必要な場合はバックエンドの署名サービスや専用 SDK を使用してください。

関連ツール

JWT 解析ツール

オンラインJWT解析ツール。JSON Web Tokenをデコード・検証。Header、Payloadの内容を確認し、API認証問題をデバッグ。

Base64 エンコードデコードツール

オンラインBase64エンコード・デコードツール。UTF-8テキスト、日本語、画像変換をサポート。リアルタイムエンコード・デコード、ソフトウェアインストール不要、データはローカル処理でプライバシー保護。

ハッシュ生成器

オンラインハッシュ生成ツール。MD5、SHA-1、SHA-256、SHA-512など複数アルゴリズム対応。テキストのハッシュ値を素早く生成し、データ検証やパスワード保存に使用。

パスワード生成器

オンライン強力パスワード生成ツール。長さ、文字種類をカスタマイズ。高安全性のランダムパスワードを生成し、ブルートフォース攻撃を防止し、アカウントを保護。

AES 暗号化復号ツール

オンラインAES暗号化・復号化ツール。AES-128/192/256、CBC/GCM/ECBモード、PKCS7パディング対応。ブラウザ内ローカル処理でデータプライバシーを保護。

JSON フォーマットツール

オンラインJSONフォーマットツール。シンタックスハイライト、エラー検出、圧縮・美化をサポート。ワンクリックでJSONデータを美化し、フォーマットエラーを素早く特定し、開発効率を向上させます。