機能
JSON Web Token(JWT、RFC 7519)は、ドットで区切られた 3 つの部分からなるコンパクトで URL セーフな文字列です。署名アルゴリズムを示すヘッダー、クレームを含むペイロード、そして前の 2 つに対する署名です。API は JWT をベアラートークンとして、ID プロバイダーは ID トークンとして使います。
このツールは JSON ペイロードからトークンを作成して署名します。対応アルゴリズム:
- HS256・HS384・HS512:共有シークレット(テキストまたは Base64)による HMAC。
- RS256・RS384・RS512 と PS256・PS384・PS512:PEM 秘密鍵による RSA 署名。
- ES256・ES384・ES512:EC 秘密鍵による ECDSA 署名。
使い方
- ペイロードを JSON オブジェクトで書くか、サンプルをクリックします。
- アルゴリズムを選び、入力欄の上部にシークレットを入力するか PEM 秘密鍵を貼り付けます。
- 必要に応じて iat を現在時刻にしたり、有効期限(exp)や鍵 ID などの追加ヘッダーを加えたりします。
- 出力からトークンをコピーします。JWT デコーダーに貼り付ければ中身を確認できます。
例
シークレットを your-256-bit-secret にして次のペイロードを HS256 で署名すると、jwt.io でおなじみのサンプルトークンになります:
{"sub":"1234567890","name":"John Doe","iat":1516239022}
ヘッダーは常に {"alg":"HS256","typ":"JWT"} の後に追加したフィールドが続く形で書かれ、alg は選んだアルゴリズムに必ず一致します。
ベストプラクティス
exp クレームでトークンの有効期間を短くし、iss と aud を設定して、あるサービス向けのトークンが別のサービスで再利用されないようにします。サーバー側では、許可するアルゴリズムを明示したうえで署名を必ず検証し、none は拒否してください。HMAC のシークレットは長くランダムにし、少なくともハッシュ出力と同じ長さ(HS256 なら 32 バイト)にします。
よくある質問
› どのアルゴリズムを選ぶべきですか?
サーバーが検証に使うものを選んでください。HS256 は共有シークレットを使い、1 つのシステム内でよく使われます。RS256 と ES256 は秘密鍵で署名し、誰でも公開鍵で検証できるので、複数のサービスが確認するトークンに向いています。ES256 の署名は RS256 よりはるかに短くなります。
› どの秘密鍵形式に対応していますか?
PEM 形式の PKCS#8(BEGIN PRIVATE KEY)、PKCS#1 RSA(BEGIN RSA PRIVATE KEY)、SEC1 EC(BEGIN EC PRIVATE KEY)に対応しています。暗号化された鍵は、先にパスフレーズなしでエクスポートしてください。ES256・ES384・ES512 では、それぞれ P-256・P-384・P-521 曲線の鍵が必要です。
› JWT のペイロードは秘密ですか?
いいえ。ヘッダーとペイロードは Base64URL でエンコードされているだけで、トークンを持つ人なら誰でも読めます。署名が防ぐのは改ざんであって、読み取りではありません。パスワードなどの秘密情報を JWT のペイロードに入れないでください。
› シークレットや秘密鍵は保存・送信されますか?
いいえ。署名はブラウザ内の Web Crypto API で行われます。シークレットや鍵はこのページのメモリ上にだけあり、保存もアドレスバーへの書き込みも共有リンクへの追加もされません。それでも、管理していない Web ページに本番環境の鍵を貼り付けるのは避けてください。