JWTエンコーダー

ブラウザーで HS256、HS384、HS512 の JWT を作成・署名。ヘッダーとペイロードの JSON を編集でき、クレームの順序や kid などの追加ヘッダーも保持されます。

入力内容とファイルはブラウザ内に留まります

ヘッダー、ペイロード、署名

署名

ヘッダーとペイロードの JSON を修正してください。署名済みトークンは入力に合わせてここに表示されます。

このページの内容

API や認証フローのテスト用に署名付き JSON Web Token を作成します。ヘッダーとペイロードの JSON を編集し、HS256、HS384、HS512 から選び、シークレットを入力してトークンをコピーするだけ。トークンはキー入力ごとに更新されます。

詳細な機能

ヘッダーとペイロードはそれぞれ JSON オブジェクトでなければなりません。不正な JSON や配列などオブジェクト以外の値は該当欄の下に表示され、トークンは生成されません。JSON は圧縮(空白を削除)され、パディングなしの base64url でエンコードされます。クレームの順序や kid、cty などの追加ヘッダーはそのまま保持されます。ヘッダーの alg の値はリストで選んだアルゴリズムに置き換えられ、ない場合は先頭に追加されます。

HMAC 署名(SHA-256、SHA-384、SHA-512)は WebAssembly にコンパイルされた Rust の暗号モジュールで計算され、シークレットは UTF-8 テキストとして使われます。使えるのは対称鍵の HMAC アルゴリズムだけで、秘密鍵が必要な RS256 や ES256 のトークンはここでは作成できません。シークレットが空でも、空の鍵で署名されたトークンが生成されますが、実験用途にしか使えません。

シークレットとクレームはページ内にとどまり、保存されません。ツールは iat や exp を自動では追加しないので、NumericDate の値(秒単位の Unix 時間)をペイロードに自分で入れてください。

実用例

jwt.io のテストベクター:既定のヘッダー {"alg":"HS256","typ":"JWT"} とペイロード {"sub":"1234567890","name":"John Doe","iat":1516239022} にシークレット your-256-bit-secret を使うと、末尾が SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c のトークンになり、jwt.io と完全に一致します。

キー ID と有効期限:ヘッダー {"alg":"HS256","typ":"JWT","kid":"key-2026"}、ペイロード {"sub":"42","role":"admin","exp":1767225600}、アルゴリズム HS384 の場合、エンコードされるヘッダーはフィールドの順序を保ったまま {"alg":"HS384","typ":"JWT","kid":"key-2026"} となり、署名は 64 文字になります。

オブジェクトではない値:ペイロードが [1,2] の場合、欄の下に「JSON オブジェクトである必要があります」と表示され、トークンはクリアされます。

このツールの使い方

  1. ヘッダーを編集する

    ヘッダー の JSON を調整します。検証側が必要とするなら kid を追加します。alg はアルゴリズムのリストから設定されます。

  2. クレームを書く

    クレーム(sub、role、exp …)を JSON オブジェクトとして ペイロード に入力します。

  3. アルゴリズムとシークレットを選ぶ

    アルゴリズム で HS256、HS384、HS512 のいずれかを選び、秘密鍵 に共有シークレットを入力します。

  4. トークンをコピーする

    エンコード済みトークン のトークンは変更のたびに更新されます。トークンをコピー でコピーします。

ヒントとベストプラクティス

  • ハッシュ長以上のランダムなシークレットを使いましょう:HS256 は 32 バイト、HS384 は 48 バイト、HS512 は 64 バイト。
  • exp、nbf、iat はミリ秒ではなく秒単位です:1767225600000 ではなく 1767225600。
  • シークレットは末尾のスペースや改行も含め、すべての文字が計算に使われます。
  • ペイロードは base64url でエンコードされているだけで暗号化されていません。トークンを持つ人なら誰でも読めます。
  • 結果は JWT デコーダーで同じシークレットを使って確認できます。