JWTジェネレーター

JWTを生成

JWTをブラウザ内で構築して署名します。ペイロードのクレーム(標準のsubaudexpなどに加え、任意のカスタム)を入力し、アルゴリズム(共有シークレットによるHS256、または秘密鍵によるRS256/ES256)を選ぶと、ツールが3パートのトークンを生成します。ローカル開発、負荷テスト、認証問題の再現に便利です。

JWTを生成する方法

  1. 1

    ペイロードを書く

    標準のクレーム(`sub`、`iss`、`aud`、`exp`、`iat`、`nbf`)に加え、アプリが期待する任意のカスタム。

  2. 2

    アルゴリズムを選ぶ

    共有シークレットによるHS256/384/512、またはPEM形式の秘密鍵によるRS256/ES256。

  3. 3

    鍵を提供する

    HMACには共有シークレットのテキスト、RSA/ECDSAには秘密鍵を貼り付けます。どちらもブラウザにとどまります。

  4. 4

    生成する

    出力は署名済みのトークンです。コピーしてテストに使い、JWTデコーダーでデコードして検査します。

認証済みユーザーのトークンの典型的なペイロード

{
  "iss": "https://auth.example.com",
  "aud": "api.example.com",
  "sub": "user_12345",
  "iat": 1713398400,
  "nbf": 1713398400,
  "exp": 1713402000,
  "jti": "3c7c7e14-2de4-41f0-bf09-1eb5cfad4c01",
  "scope": "read:profile write:posts"
}

アルゴリズムの選択:HMAC vs 非対称

アルゴリズム 鍵の種類 使用する場面
HS256 256ビット共有シークレット 自分で署名し検証するモノリス
HS384/512 より長いシークレット HS256と同じだがより強力
RS256 RSA 2048+ 発行者が署名し、多くのサービスが公開鍵で検証
ES256 ECDSA P-256 RS256と同じだが署名が小さい
EdDSA Ed25519 最速の非対称検証、最小の鍵

鍵の強度

  • HMACのシークレットは、少なくともアルゴリズムの出力サイズと同等のエントロピーを持たなければなりません。HS256は256ビットのランダム(32バイト)を必要とし、それ未満は総当たり可能です。
  • RSAの鍵は最低2048ビット、長命なトークンには3072または4096であるべきです。
  • ECDSA(ES256)は、はるかに小さい鍵とより速い署名で、RSA 3072に匹敵するセキュリティを提供します。

有効期限のガイドライン

トークンの種類 典型的な exp の期間
アクセストークン 5〜60分
リフレッシュトークン 数日〜数週間
パスワードリセット 5〜15分
メール認証 24時間
サービス間 1〜5分(短め)

短い有効期限+リフレッシュトークンが現代のパターンです。長命なアクセストークンは、漏洩したときに失効させるのが難しいです。

よくある間違い

  • テスト用のシークレットを本番で再利用する。 ジェネレーターは、シークレットが弱そうな場合、HS256のシークレットと出力JWTをテスト専用とマークします。その警告を信頼してください。
  • expなしで署名する。 有効期限のないJWTは永遠に有効です。よほどの理由と失効リストがない限り、常にexpを設定してください。
  • 検証側でヘッダーのalgを使う。 検証側では常にアルゴリズムを許可リスト化してください。トークンが要求するものに従わないでください。
  • ここに本物の秘密鍵を貼り付ける。 このジェネレーターはブラウザで動きますが、秘密鍵は秘密として扱ってください:本番のものではなくテスト用の鍵を使ってください。

よくある質問

いいえ。署名はWeb Crypto APIを使ってブラウザで行われます。鍵がマシンから出ることはありません。とはいえ、本番の鍵については、ブラウザではなく管理された環境で生成・署名してください。

同じサービスが署名し検証するモノリスにはHS256で十分です。発行者が検証者と分かれているときはRS256またはES256のほうが良いです、署名鍵をさらさずに公開鍵を共有できます。

短く。アクセストークンには5〜15分が典型です。シームレスなUXには、より長い寿命のリフレッシュトークンを使ってください。expクレームなしでJWTを発行しないでください。

ツールは、壊れた/署名なしのトークンの意図的なテストのために、目立つ警告とともにalg: noneの出力に対応しています。本番コードではそのようなトークンを決して受け入れないでください。

関連ツール

このツールは他の言語でも利用できます