JWT Encoder

HS256、HS384、HS512でJSONウェブトークンを作成および署名

ヘッダー

ローカルで実行 · シークレットの貼り付けも安全

ペイロード

ローカルで実行 · シークレットの貼り付けも安全

秘密鍵

ローカルで実行 · シークレットの貼り付けも安全

エンコードされたJWT

Output will appear here…

あなたの秘密鍵はブラウザを離れません。すべての署名はクライアント側で行われます。

こちらもどうぞ:JWTデコーダー

JWTエンコーディングとは?

JWTエンコーディングはJSON Web Tokenを作成するプロセスです——コンパクトでURL安全な文字列で、暗号化キーで署名された一連のクレームを保有します。結果はRFC 7519で定義された3つのパート(ヘッダー.ペイロード.署名)を持つトークンで、サーバーはセッション状態を維持することなく検証できます。オンラインJWTエンコーディングは、テストと開発のためにブラウザで直接トークンを作成および署名することができます。

ヘッダーは署名アルゴリズム(例:HS256)とトークンタイプを宣言します。ペイロードはクレーム——主体(sub)、有効期限(exp)、およびアプリケーションが必要とするカスタムデータなどのキーと値のペアを含みます。両方の部分はJSONとしてシリアル化され、base64urlエンコードされます。署名は秘密キーを使用して、エンコードされたヘッダーとペイロードで計算され、3つのセグメントを結合します。

セッションクッキーとは異なり、JWTは自己完結型です:検証者はデータベースにクエリする必要がなく、外部サービスを呼び出す必要がありません。これにより、JWT ベースの認証はREST API、マイクロサービス、シングルページアプリケーションで人気があり、ステートレス承認が遅延を減らし、水平スケーリングを簡素化します。

JWT Encoderを使用する理由は?

JWTを手動で生成するには、base64urlエンコード、JSONシリアル化、HMAC計算が必要です。このツールはすべての3つのステップを瞬時に処理するため、正しいクレームに集中できます。

インスタントトークン生成
ヘッダー、ペイロード、秘密キーを編集してください——署名されたJWTはリアルタイムで更新されます。ビルドステップなし、ライブラリのインストールなし、ボイラープレートコードなし。
🔒
複数のHMACアルゴリズム
HS256、HS384、HS512の間をワンクリックで切り替えます。ヘッダーは自動的に更新され、署名は即座に再計算されます。
🛡️
プライバシーファースト処理
すべての署名はWeb Crypto APIを使用してブラウザで実行されます。秘密キーとペイロードデータはマシンを離れることがありません——サーバーなし、ログなし、リスクなし。
📋
ワンクリッククレームヘルパー
iat、exp+1h、またはexp+24hタイムスタンプを1つのボタンで追加します。Unixタイムスタンプを手動で計算したり、現在のエポック時間を検索したりする必要はありません。

JWT Encoderユースケース

フロントエンド認証テスト
特定のクレームと有効期限を持つトークンを生成して、バックエンド認証サーバーを実行せずにログインフロー、トークンリフレッシュロジック、保護されたルートガードをテストします。
バックエンドAPI開発
カスタムsub、aud、scopeクレームを持つテストトークンを作成して、ローカル開発中に認可ミドルウェア、ロールベースのアクセス制御、権限チェックを練習します。
DevOpsおよびCI/CDパイプライン
デプロイスクリプト、統合テスト、またはサービス間通信の短期トークンを生成します(完全なOAuthフローは不要な複雑さを追加するでしょう)。
QAと手動テスト
エッジケースクレームを持つトークンを構築します——有効期限切れのトークン、欠落フィールド、不正なオーディエンス——APIが正しいHTTP 401または403応答を返すことを確認します。
セキュリティ監査
異なるアルゴリズムと秘密の長さで署名されたトークンを作成して、検証ロジックが弱いまたは一致しない署名を正しく拒否することを検証します。
学習とプロトタイピング
JWTの学生と新しい開発者は、ヘッダーフィールド、クレーム構造、署名アルゴリズムを試して、トークンの各部分がどのように機能するかを理解できます。

HS256 vs HS384 vs HS512:HMACアルゴリズム比較

3つのアルゴリズムはすべてHMAC(ハッシュベースのメッセージ認証コード)を共有秘密で使用します。違いは基礎となるハッシュ関数にあり、署名長とセキュリティマージンに影響します。ほとんどのアプリケーションでは、HS256は十分なセキュリティを提供します。コンプライアンス要件(例:FIPS-140)がより強力なハッシュを必須にしているか、トークンが高価値の認可決定を担う場合は、HS384またはHS512を選択します。

アルゴリズムハッシュ署名速度典型的な使用
HS256SHA-25632 BFastestGeneral purpose, default for most libraries
HS384SHA-38448 BFastHigher security margin, FIPS-140 compliant
HS512SHA-51264 BFastMaximum HMAC security, large payloads

標準JWTクレームリファレンス

RFC 7519は7つの登録されたクレームを定義しています。どれも必須ではありませんが、正しく使用するとinteroperabilityとセキュリティが向上します。expクレームは特に重要です——有効期限のないトークンは、秘密がローテーションされない場合、無期限に有効です。

クレーム名前説明
issIssuerWho issued the token"auth.example.com"
subSubjectWho the token represents"user-123"
audAudienceIntended recipient service"api.example.com"
expExpirationUnix timestamp — token invalid after this time1717203600
nbfNot BeforeUnix timestamp — token invalid before this time1717200000
iatIssued AtUnix timestamp when the token was created1717200000
jtiJWT IDUnique token identifier for revocation tracking"a1b2c3d4"

コード内のJWTエンコーディング

これらの例は、プログラムでJWTを作成および署名する方法を示しています。各スニペットは有効なHS256署名トークンを生成します。本番システムの場合は、常にexpクレームを設定し、最低256ビットの暗号的に安全な秘密を使用します。

JavaScript (Web Crypto API)
async function signJWT(payload, secret, alg = 'HS256') {
  const header = { alg, typ: 'JWT' }
  const enc = new TextEncoder()

  // Base64url encode header and payload
  const b64url = (obj) =>
    btoa(JSON.stringify(obj)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

  const h = b64url(header)
  const p = b64url(payload)

  // Sign with HMAC-SHA256
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(`${h}.${p}`))
  const s = btoa(String.fromCharCode(...new Uint8Array(sig)))
    .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

  return `${h}.${p}.${s}`
}

// Usage
const token = await signJWT(
  { sub: 'user-123', name: 'Alice', iat: Math.floor(Date.now() / 1000) },
  'your-256-bit-secret'
)
// → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."
Python (PyJWT)
import jwt
import time

payload = {
    "sub": "user-123",
    "name": "Alice",
    "iat": int(time.time()),
    "exp": int(time.time()) + 3600,  # expires in 1 hour
}

# Sign with HS256 (default)
token = jwt.encode(payload, "your-256-bit-secret", algorithm="HS256")
# → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."

# Verify and decode
decoded = jwt.decode(token, "your-256-bit-secret", algorithms=["HS256"])
# → {"sub": "user-123", "name": "Alice", "iat": 1717200000, "exp": 1717203600}
Node.js (jsonwebtoken)
const jwt = require('jsonwebtoken')

const payload = {
  sub: 'user-123',
  name: 'Alice',
  role: 'admin',
}

// Sign — iat is added automatically
const token = jwt.sign(payload, 'your-256-bit-secret', {
  algorithm: 'HS256',
  expiresIn: '1h',    // sets exp claim
  issuer: 'auth.example.com',  // sets iss claim
})

// Verify
const decoded = jwt.verify(token, 'your-256-bit-secret')
// → { sub: 'user-123', name: 'Alice', role: 'admin', iat: ..., exp: ... }
Go (golang-jwt)
package main

import (
    "fmt"
    "time"
    "github.com/golang-jwt/jwt/v5"
)

func main() {
    claims := jwt.MapClaims{
        "sub":  "user-123",
        "name": "Alice",
        "iat":  time.Now().Unix(),
        "exp":  time.Now().Add(time.Hour).Unix(),
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    signed, _ := token.SignedString([]byte("your-256-bit-secret"))
    fmt.Println(signed)
    // → eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOi...
}

よくある質問

JWTエンコーディングとJWTデコーディングの違いは何ですか?
JWTエンコーディングはヘッダー、ペイロード、秘密キーから署名されたトークンを作成します。JWTデコーディングはプロセスを逆にします——base64urlエンコードされたヘッダーとペイロードをJSONに読み戻します。デコーディングは秘密を必要としません;エンコーディングは常に必要です(署名を計算する必要があるため)。
JWT秘密キーはどのくらい長くするべきですか?
HS256の場合は、最低256ビット(32バイト)の秘密を使用します。HS384の場合は最低384ビット(48バイト)。HS512の場合は最低512ビット(64バイト)。より短い秘密は技術的にほとんどのライブラリで受け入れられていますが、HMAC署名の有効なセキュリティを低下させます。人間が選んだパスフレーズではなく、暗号的に安全な乱数生成器を使用して秘密を生成します。
このツールで本物の秘密キーを使用するのは安全ですか?
このツールはWeb Crypto APIを使用してブラウザですべてを処理します——サーバーにデータが送信されることはありません。とはいえ、一般的なセキュリティ実践として、本番秘密をWebツールに貼り付けることは避けてください。本番キー管理には、環境変数またはHashiCorp VaultやAWS Secrets Managerなどのシークレットマネージャーを使用します。
アプリケーションにHS256またはRS256を使用する必要がありますか?
同じサービスがトークンを作成および検証する場合はHS256を使用してください——より高速で簡単です。サードパーティサービスがトークンを作成する能力なしに検証する必要がある場合はRS256(非対称)を使用してください。RS256はOAuth 2.0プロバイダー、OpenID Connect、マルチテナントSaaSアーキテクチャで一般的です。
JWTが作成直後に有効期限切れになるのはなぜですか?
expクレームはミリ秒ではなく秒単位のUnixタイムスタンプを使用します。expをDate.now()(ミリ秒を返す)に設定した場合、トークンは将来数千年で期限切れに見えます——または秒が期待される場所でミリ秒値を誤って使用した場合、ライブラリはそれをすでに期限切れとして解釈するかもしれません。JavaScriptではMath.floor(Date.now() / 1000)を常に使用するか、Pythonではint(time.time())を使用します。
JWTペイロードに機密データを含めることはできますか?
できますが、すべきではありません。JWTペイロードはbase64urlエンコードされていますが、暗号化されていません——トークンを持つ誰でもクレームを読むことができます。パスワード、クレジットカード番号、または個人データをペイロードに保存しないでください。機密情報を含める必要がある場合は、RFC 7516で定義されているJWE(JSON Web Encryption)を使用します。これはペイロード全体を暗号化します。
署名後にペイロードを変更するとどうなりますか?
署名は無効になります。HMAC署名はエンコードされたヘッダーとペイロードの正確なバイトで計算されます。スペースを追加したり、1文字を変更したりするだけで、まったく異なる署名が生成されます。適切に実装された検証者は、署名不一致エラーでトークンを拒否します。