JWTジェネレーター
HS256/384/512、RS、PS、ES、EdDSAで署名付きJSON Web Tokenを作成します。ペイロードの編集、expとiatの設定、鍵やシークレットの生成がすべてブラウザ内で行えます。
ハッシュ長以上のランダムなバイト列を使ってください(HS256 なら 32 バイト)。短いパスワードはオフラインで総当たりされる恐れがあります。
JWTジェネレーターとは?
JWTジェネレーターは、任意のJSONペイロードに署名して、コンパクトなJSON Web Tokenにします。HMAC(HS256/384/512)、RSA(RS256/384/512)、RSA-PSS(PS256/384/512)、ECDSA(ES256/384/512)、EdDSA(Ed25519)に対応し、ワンクリックでiatとexpのクレームを追加できます。また、ランダムなシークレットや、検証に使える公開鍵付きの鍵ペアも生成できます。
JWTジェネレーターの使い方
- アルゴリズムを選びます。
- ペイロードのJSONを編集します。ボタンで、iatを現在時刻に、expを1時間後または1日後に設定できます。
- シークレット(HS*)またはPKCS#8 PEM / JWKの秘密鍵を入力するか、Generate random secret / Generate key pairを押します。
- 必要に応じてキーID(kid)を設定し、Sign tokenを押して、トークン(非対称アルゴリズムでは公開鍵も)をコピーします。
例
HS256, payload {"sub":"1"}, secret your-256-bit-secret eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxIn0.rTCH8cLoGxAm_xw68z-zXVKi9ie6xJn9tnVWjd_9ftE
JWTジェネレーターを使うべき場面
API開発用のテストトークンの作成、バグの再現、JWTの署名の仕組みの学習に使います。本番では、鍵をシークレットストアに保持できるよう、認証サーバーからトークンを発行してください。本番の秘密鍵をWebサイトに貼り付けてはいけません。
JWTジェネレーターの仕組み
署名には、ブラウザのWeb Crypto APIの上でjoseライブラリを使います。ヘッダーは {"alg": …, "typ": "JWT"} に任意のkidを加えたもので、ヘッダーとペイロードはJSONにシリアライズされ、Base64URLでエンコードされて署名されます。HMACのシークレットはUTF-8バイトとして使われ、ボックスにチェックを入れるとBase64/Base64URLからデコードされます。生成されるHMACシークレットは、ハッシュサイズに合わせた32/48/64バイトのランダムなバイト列で、鍵ペアはWeb Cryptoで作成され、PKCS#8とSPKIのPEMとしてエクスポートされます。
一般的な使用例
- APIの401処理をテストするために、期限切れのトークンを作る。
- JWKSベースのバリデーターをテストするために、RS256の鍵ペアとトークンを生成する。
- ローカル開発向けに、カスタムクレーム付きのトークンに署名する。
- HS256とES256の署名の違いを説明する。
セキュリティ注意事項
テストには使い捨ての鍵を使ってください。短い、または推測されやすいHMACシークレットは、それで署名されたトークンからオフラインで総当たりされる可能性があります。
よくある質問
どのアルゴリズムを使うべきですか。
同じサービスがトークンを発行して検証し、共有シークレットを保持できるならHS256です。ほかの関係者が公開鍵でトークンを検証する必要があるなら、RS256、ES256、EdDSAです。
RSA鍵が拒否されるのはなぜですか。
BEGIN RSA PRIVATE KEYで始まる鍵はPKCS#1です。openssl pkcs8 -topk8 -nocrypt -in key.pem でPKCS#8(BEGIN PRIVATE KEY)に変換してください。
生成した鍵は保存されますか。
いいえ。ページを離れるまでの間だけ、ページ内に存在します。