JWT エンコーダー&ジェネレーター
無料のオンラインJWTジェネレーター&エンコーダー。ヘッダーとペイロードを組み立て、HS256、RS256、ES256で即座に署名できます。100%ブラウザ動作 — シークレットと鍵はデバイスから外に出ません。
JWTエンコーダーとは?
JWTエンコーダーは、ヘッダーとクレームのペイロードからJSON Web Tokenを組み立てて暗号学的に署名します。RFC 7519で定義されるJWTは、ドットで連結された3つのBase64URLエンコード済みセクション、header.payload.signatureです。ヘッダーは署名アルゴリズムを示し、ペイロードはクレーム(トークンが誰についてのものか、何ができるか、いつ期限切れになるか)を運び、署名はシークレットまたは秘密鍵を使ってヘッダーとペイロードから計算される暗号学的な証明で、受信者が改ざんを検出できるようにします。
「JSON Web Token (JWT) は、HTTP Authorization ヘッダーや URI クエリパラメータなど、スペースに制約のある環境を対象としたコンパクトなクレーム表現形式である。」— RFC 7519, Section 1
エンコードはデコードの逆です。JWTデコーダーは既存トークンのクレームを読み取りますが、エンコーダーは指定したクレームを受け取り、まったく新しい署名済みトークンを生成します。この署名のステップこそが、本物のJWTを単なるBase64から区別するものです — 有効な署名がなければ、どの検証者もトークンを受け入れません。本ツールはブラウザのネイティブWeb Crypto APIを使い、HMAC(HS)、RSA(RS、PS)、ECDSA(ES)の各ファミリーにわたって署名するため、操作全体が依存ゼロ・ネットワーク呼び出しゼロでデバイス上で完結します。
開発者はJWTエンコーダーを頻繁に使います。保護されたAPIエンドポイントを試すトークンの発行、バグをデバッグするためにOAuthサーバーが発行する正確なクレーム形状の再現、結合テスト用のフィクスチャの構築、curlコマンド用にチームメイトへすぐ使えるBearerトークンを渡すためなどです。ペイロードはエンコードされているだけで、暗号化されていないため、JWTはネットワーク経由で渡しても安全ですが、決して秘密を運んではいけません — トークンを持つ者は誰でもすべてのクレームを読むことができ、署名だけがそれを変更させない唯一の歯止めです。
JWTの作業は他の開発者ツールと自然に組み合わさります。署名した後は、トークンをデコードしてクレームを確認したり、expとiatを変換してUnix時刻と人間の日付を行き来したり、HS256のHMACが土台としているハッシュ関数が必要なときにSHA-256ハッシュを計算したりします。すべてのJWTセグメントはBase64URLでエンコードされているため、トークンを手作業で検査するときにはBase64ツールが役立ちます。エンコードを深く理解したい方は、Base64の基礎ガイドをご覧ください。
// Sign a JWT in the browser with the Web Crypto API (HS256)
async function encodeJwt(payload, secret) {
const b64url = (bytes) =>
btoa(String.fromCharCode(...new Uint8Array(bytes)))
.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
const enc = (obj) =>
b64url(new TextEncoder().encode(JSON.stringify(obj)));
const header = { alg: 'HS256', typ: 'JWT' };
const signingInput = `${enc(header)}.${enc(payload)}`;
const key = await crypto.subtle.importKey(
'raw', new TextEncoder().encode(secret),
{ name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
const sig = await crypto.subtle.sign(
'HMAC', key, new TextEncoder().encode(signingInput));
return `${signingInput}.${b64url(sig)}`;
}
const token = await encodeJwt({ sub: 'user_123', exp: 1999999999 }, 'my-secret');
// → eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsImV4cCI6MTk5OTk5OTk5OX0.... 主な機能
JWTを即座に生成・署名
ペイロードを編集すると署名済みトークンがリアルタイムで更新されます — ヘッダー、ペイロード、署名がその場で計算されます。生成ボタンもサーバーへのラウンドトリップもありません。
アルゴリズムを網羅
HS256/384/512、RS256/384/512、PS256/384/512、ES256/384/512で署名 — 一般的なJWSファミリーすべてに対応し、いずれもブラウザのネイティブWeb Crypto APIを使います。
鍵はデバイスから出ない
シークレットとPKCS8秘密鍵はすべてブラウザ内で使用されます。何もアップロード・ログ記録・保存されないため、開発やインシデント対応でも安全です。
クイッククレームヘルパー
iss、sub、aud、iat、nbf、または1時間後のexpをワンクリックで挿入 — 手動のUnixタイムスタンプも構文ミスもありません。
色分けされた出力
署名済みトークンはヘッダー、ペイロード、署名に分けて異なる色で表示されるため、構造が一目でわかり、コピーも簡単です。
依存ゼロ
ブラウザのWeb Crypto APIとJSONのみで構築 — 外部ライブラリも、テレメトリも、いかなるネットワーク呼び出しもありません。
使用例
HS256セッショントークン
{
"sub": "user_123",
"name": "Alice",
"role": "admin",
"iat": 1715000000,
"exp": 1999999999
}
secret: a-string-secret-at-least-256-bits-long eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsIm5hbWUiOiJBbGljZSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTcxNTAwMDAwMCwiZXhwIjoxOTk5OTk5OTk5fQ.<HMAC-SHA256 signature>
共有シークレットで署名されたHMAC-SHA256トークン — ステートレスなセッション認証で最もよく使われる構成です。同じシークレットを持つ者なら誰でも検証できます。
RS256アクセストークン
{
"iss": "https://auth.example.com",
"aud": "api.example.com",
"sub": "90087165",
"scope": "read:user write:post",
"iat": 1715000000,
"exp": 1999999999
}
private key: -----BEGIN PRIVATE KEY----- (PKCS8) eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2F1dGguZXhhbXBsZS5jb20iLCJhdWQiOiJhcGkuZXhhbXBsZS5jb20iLCJzdWIiOiI5MDA4NzE2NSIsInNjb3BlIjoicmVhZDp1c2VyIHdyaXRlOnBvc3QiLCJpYXQiOjE3MTUwMDAwMDAsImV4cCI6MTk5OTk5OTk5OX0.<RSA signature>
RSAで署名されたOAuthスタイルのアクセストークン。トークンは秘密鍵で署名され、対応する公開鍵を持つ者なら誰でも検証できます — 検証者がトークンを発行できてはならない場合に最適です。
ES256コンパクトトークン
{
"sub": "device-42",
"iat": 1715000000,
"exp": 1999999999
}
private key: -----BEGIN PRIVATE KEY----- (P-256) eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkZXZpY2UtNDIiLCJpYXQiOjE3MTUwMDAwMDAsImV4cCI6MTk5OTk5OTk5OX0.<ECDSA P-256 signature>
P-256曲線上のECDSAトークン。ES256の署名はRSAよりはるかに短く、同等のセキュリティを提供するため、リソースの限られた環境でもトークンを小さく保てます。
使い方
- 1
ペイロードのクレームを編集
トークンに必要なクレームをペイロードエディタにJSONとして記述します。クイッククレームチップを使えば、タイムスタンプを手入力せずにiss、sub、aud、iat、nbf、1時間後のexpを挿入できます。
- 2
アルゴリズムを選び鍵を入力
署名アルゴリズムを選びます。HS256/384/512ではシークレットを入力し、RS、PS、ESアルゴリズムではPKCS8 PEMの秘密鍵を貼り付けます。トークンは入力するそばからローカルで署名されます。
- 3
署名済みJWTをコピー
署名済みトークンがセグメントごとに色分けされて即座に表示されます。コピーをクリックして、Authorizationヘッダー、curlコマンド、テストに取り込みます。鍵がブラウザから外に出ることはありませんでした。
Common Errors
弱いHMACシークレットを使う
HS256のセキュリティはシークレットのエントロピーに完全に依存します。短いシークレットや推測しやすいシークレットは、攻撃者の総当たりを許し、トークンを偽造させてしまいます。少なくとも256ビットのランダム性を使ってください。
secret: "password123" // guessable, low entropy
secret: base64(crypto.randomBytes(32)) // >=256 random bits
expクレームを省略する
expのないトークンは決して期限切れになりません。漏洩した場合、自然な失効ポイントがありません。トークンの種類に応じた有効期限を必ず設定してください。
{ "sub": "user_123", "role": "admin" } // no exp { "sub": "user_123", "role": "admin", "exp": 1715003600 } PKCS8の代わりにPKCS1鍵を貼り付ける
Web Crypto APIはPKCS8の秘密鍵のみをインポートします。従来のRSA PKCS1鍵はインポートに失敗します — まず変換してください。
-----BEGIN RSA PRIVATE KEY----- // PKCS1, not supported
openssl pkcs8 -topk8 -nocrypt -in pkcs1.pem -out pkcs8.pem
一般的なユースケース
- APIテスト用トークンを生成
- HS256のBearerトークンを数秒で生成し、curl、Postman、結合テストから保護されたエンドポイントを試せます。
- OAuth・OIDCトークンを再現
- 認可サーバーが発行するものを反映したRS256やES256のトークンを構築し、クレームやaudienceの不一致をデバッグできます。
- テストフィクスチャを作成
- 完全な認証サーバーを立ち上げることなく、ユニットテストや結合テスト用に決定的な署名済みトークンを生成します。
- 認可の失敗をデバッグ
- 顧客のトークン形状 — 発行者、audience、scope、有効期限 — を再現し、バックエンドが拒否する理由を突き止めます。
- 検証者を検証
- 既知の鍵でトークンに署名し、検証ミドルウェアが有効なトークンを受け入れ、改ざんされたものを拒否することを確認します。
- 認証フローのプロトタイプ
- 新しいログイン、マイクロサービス、サービス間呼び出しを構築する間、チームメイトにすぐ使えるトークンを渡せます。
技術的な詳細
- RFC 7519 / 7515 / 7518準拠
- RFC 7519(JWT)、RFC 7515(JWS)、RFC 7518(JWA)に準拠したJWSトークンを生成し、登録済みのアルゴリズム識別子をヘッダーに記載します。
- ネイティブWeb Crypto署名
- HMAC、RSASSA-PKCS1-v1_5、RSA-PSS、ECDSAについてcrypto.subtleで署名します。ECDSAの署名はJWSが要求するとおり、生のr||sとして出力されます。
- Base64URL・依存ゼロ
- ヘッダーとペイロードはURLセーフなアルファベット(RFC 4648)でパディングなしのBase64URLエンコードを行います。外部ライブラリも、ネットワーク呼び出しも、テレメトリもありません。
ベストプラクティス
- 必ず有効期限を設定する
- expクレームを含めて、漏洩したトークンが有効でなくなるようにします。短い有効期限は影響範囲を縮めます — アクセストークンは日単位ではなく分単位で。
- ペイロードに秘密を入れない
- JWTのペイロードはトークンを持つ者なら誰でも読めます。識別子やスコープは入れても、パスワード、APIキー、完全なPIIは決して入れないでください。
- 本番環境ではサーバー側で署名する
- 本ツールはテストとデバッグに使ってください。実際のシステムでは、メンテナンスされているライブラリとシークレットマネージャーの鍵を使い、サーバーでトークンに署名します。
よくある質問
JWTをオンラインで生成するにはどうすればよいですか?
JWTジェネレーターとは何ですか?
header.payload.signature形式の文字列を生成するツールです。JWTデコーダーの逆の役割を果たします。既存のトークンを読むのではなく、シークレット(HS256)または秘密鍵(RS256/ES256)で署名した新しいトークンを作成します。このジェネレーターはすべてブラウザ内で動作するため、トークンは即座に生成され、署名鍵がデバイスから外に出ることはありません。 このJWTジェネレーターは無料で安全に使えますか?
ここにシークレットや秘密鍵を入力しても安全ですか?
HS256とRS256の違いは何ですか?
このJWTエンコーダーはどのアルゴリズムに対応していますか?
exp(有効期限)クレームはどう設定すればよいですか?
expクレームを秒単位のUnixタイムスタンプとしてペイロードに追加してください — 例えば"exp": 1999999999です。最も手早い方法は、ペイロードの下にあるexp +1hチップで、現在から1時間後の有効期限を挿入します。同じ方法でiat(発行時刻)やnbf(not before)も追加できます。expはミリ秒ではなく秒であること、また検証者はそれを自身の時計と比較するため、早すぎる拒否を避けるにはサーバーの時刻を同期させておくことを忘れないでください。人間が読める日付をUnixタイムスタンプに変換するには、Unixタイムスタンプ変換ツールをお使いください。 RS256やES256用のPKCS8 PEM秘密鍵はどう入手すればよいですか?
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private.pem。ECDSA P-256の場合:openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out ec-private.pem。どちらのコマンドも-----BEGIN PRIVATE KEY-----で始まるPKCS8 PEMブロックを出力し、これがまさに本ツールが期待する形式です。ヘッダー行とフッター行を含むブロック全体を貼り付けてください。トークンの検証に使う対応する公開鍵はopenssl pkey -in private.pem -puboutで導出できます。 生成したトークンを検証するにはどうすればよいですか?
jwt.verify(token, secretOrPublicKey, { algorithms: ['HS256'] })、PythonではPyJWT.decode(token, key, algorithms=['RS256'])、Goではjwt.Parse(token, keyFunc)です。本番環境では、空のアルゴリズムリストやverify_signature=Falseで検証してはいけません — 常に期待する正確なアルゴリズムを固定してください。 ペイロードには何を入れるべきですか?
iss(発行者)、sub(サブジェクト — 通常はユーザーID)、aud(audience)、exp(有効期限)、nbf(not before)、iat(発行時刻)、jti(トークンID)です。これらと並べて、role、scope、emailなどのアプリケーションクレームを追加できます。ペイロードに秘密を入れてはいけません — JWTはエンコードされているだけで、暗号化されていないため、トークンを持っている人は誰でもすべてのクレームを読めます。トークンはAuthorizationヘッダーやCookieに収まるよう、約4 KB未満に保ってください。 JWTは暗号化されていますか?
RS256やES256の署名が失敗するのはなぜですか?
-----BEGIN RSA PRIVATE KEY-----(PKCS1)鍵はopenssl pkcs8 -topk8 -nocrypt -in old.pem -out pkcs8.pemで変換してください。(2) 曲線がアルゴリズムと一致していない — ES256はP-256鍵、ES384はP-384、ES512はP-521が必要です。(3) 秘密鍵ではなく公開鍵や証明書を貼り付けてしまった。(4) 鍵がパスフレーズで暗号化されており、Web Crypto APIは直接インポートできない。まずopenssl pkeyで復号し、暗号化されていないPKCS8ブロックを貼り付けてください。 このツールはalg:noneの署名なしトークンに対応していますか?
alg:noneのトークンには署名がないため、誰でも偽造できます — これは古典的なJWT認証バイパス脆弱性の根源です。エンコーダーの本来の目的は署名付きトークンを生成することなので、本ツールは本物の署名アルゴリズムのみを提供します。セキュリティ研究でalg:noneを学んでいる場合は、ヘッダーとペイロードをBase64URLエンコードし、署名セグメントを空のままにすることで手作業で構成できます — トークンは末尾にドットが残ります(header.payload.) — が、本番環境でそのようなトークンを受け入れてはいけません。 代わりにコードでJWTを生成できますか?
jsonwebtoken.sign(payload, secret, { algorithm: 'HS256', expiresIn: '1h' })。Pythonでは:PyJWTでjwt.encode(payload, key, algorithm='RS256')。Goでは:jwt.NewWithClaims(jwt.SigningMethodES256, claims).SignedString(privateKey)。本ツールは、手早いテスト、curlリクエスト、フィクスチャ用のトークンを生成する最速の方法です — ただしアプリケーションコードでは、メンテナンスされているライブラリとシークレットマネージャーから読み込んだ鍵を使ってサーバー側でトークンを生成すべきで、決してハードコードしてはいけません。 関連ツール
すべてのツールを見る →JWT デコーダー — オンライン解析ツール
セキュリティツール
JWTトークンを無料のJWTデコーダーでオンラインデコード。ヘッダー、ペイロード、署名、有効期限、アルゴリズム、クレームを即座に検査できます。100%ブラウザ動作 — トークンはデバイスから外に出ません。登録不要、追跡なし。
MD5ハッシュジェネレーター&ファイルチェックサムツール
セキュリティツール
無料オンラインMD5ハッシュ生成ツール。ブラウザ上でMD5・SHA-256・SHA-1・SHA-512のハッシュ値を即座に生成。テキストやファイルのチェックサム検証・比較、ワンクリックコピー対応。登録不要でデータはサーバーに送信されません。
ランダムパスワード生成 — カスタマイズ可能&安全
セキュリティツール
無料のオンラインランダムパスワード生成ツール。ブラウザ上で安全な強力パスワードを即座に自動生成できます。長さや文字種のカスタマイズ、最大50個の一括生成に対応。エントロピー分析付き強度メーター搭載。データはサーバーに送信されません。
SHA-1ハッシュジェネレーター(160ビット・レガシー)
セキュリティツール
ブラウザ上でSHA-1ハッシュを生成。40文字の16進数出力、アップロード不要。Gitコミット確認・旧証明書フィンガープリント検証・移行監査向けレガシーツール。データはデバイス外に出ません。
SHA-256ハッシュジェネレーター&チェックサムツール
セキュリティツール
SHA-256ハッシュをオンラインで無料生成。テキストやファイルをブラウザ上でハッシュ化し、チェックサムを検証して64文字の16進数出力をコピー。登録不要、データはページ外に出ません。
SHA-3ハッシュジェネレーター(Keccak SHA3-256)
セキュリティツール
SHA-3ハッシュをオンラインで無料生成。NIST FIPS 202スポンジ構造 — SHA-2後継の標準。SHA3-256出力64文字16進数。ブラウザ完結型(遅延読み込みjs-sha3)、アップロードなし。