JWTエンコーダー(生成・署名)
ヘッダーとペイロードのJSONから、HS256・HS384・HS512のいずれかでHMAC署名したJWT(JSON Web Token)をその場で生成できる開発者向けツールです。秘密鍵を含め、入力内容は一切サーバーへ送信せずブラウザ内だけで処理を完結します。
対応するHMAC署名アルゴリズム一覧
| アルゴリズム | ハッシュ関数 | 署名長 | 説明 |
|---|---|---|---|
| HS256 | SHA-256 | 256ビット(32バイト) | 最も広く使われるデフォルトのHMAC署名。OAuth 2.0・OpenID ConnectのIDトークンなど多くの実装で標準採用されている。 |
| HS384 | SHA-384 | 384ビット(48バイト) | HS256よりも長い署名でセキュリティマージンを高めたい場合に使用する中間的な選択肢。 |
| HS512 | SHA-512 | 512ビット(64バイト) | 最も長い署名長を持ち、十分に長いランダムなシークレットと組み合わせて使うことが多い。 |
Tips
- 生成したJWTはブラウザ内のWeb Crypto APIのみで署名され、シークレットを含む入力内容は toolbase.cc のサーバーには一切送信されません。
- 署名アルゴリズム(HS256/HS384/HS512)を切り替えると、ヘッダーJSON内の
algフィールドが自動的に書き換わります。kidなど他のクレームを追加したい場合はヘッダーを直接編集してください。 - このツールはHMAC(共通鍵)方式のみに対応しています。RS256・ES256のような公開鍵方式の署名が必要な場合は、Node.jsなどサーバーサイドのライブラリを利用してください。
- ヘッダー・ペイロードを編集した後は、必ず「JWTを生成する」を再度押してください。押すまでは編集前の内容で生成された古いJWTが表示されたままになります。
- 生成したJWTの中身をその場で確認したい場合は、姉妹ツールの JWTデコーダー に貼り付けるとヘッダー・ペイロードを検証できます。
よくある質問
alg フィールドの値が食い違うと、生成したJWTを他の実装で検証した際にエラーになる場合があるため、両者は必ず一致させてください。
余談ですが ― なぜJWTの署名は「ブラウザだけ」で完結できるのか
JWTの署名アルゴリズムは、送信側と受信側が同じ秘密鍵を共有する「共通鍵方式(HMAC、HS256/HS384/HS512)」と、秘密鍵で署名し公開鍵で検証する「公開鍵暗号方式(RS256・ES256等)」に大きく分かれます。前者はW3Cが標準化したWeb Crypto API(SubtleCrypto)のcrypto.subtle.sign()を使えば外部ライブラリなしでブラウザだけで完結して計算できるため、このツールでは意図的にHMAC方式のみに対応を絞っています。
HMAC署名の安全性は、ヘッダーやペイロードの内容ではなく秘密鍵の推測されにくさにすべて依存します。RFC 7518(JSON Web Algorithms)はHS256であれば256ビット(32バイト)以上の鍵長を推奨しており、短い単語や辞書に載っているような文字列を秘密鍵に使うと、総当たり攻撃で署名を偽造されるリスクがあります。実運用では乱数生成器で作った十分に長いランダム文字列を秘密鍵として使うべきです。
このツールはAPI開発時の動作確認や、Webhookの署名検証ロジックをテストする用途を想定した開発者向けのユーティリティです。入力したシークレットはブラウザ内のメモリ上でのみ扱われ外部送信はされませんが、共有端末やブラウザ拡張機能がクリップボードや入力内容を収集するリスクはゼロではありません。本番環境で実際に使用している秘密鍵は、動作確認目的であってもこの種のツールには入力しないことを強く推奨します。