本文へスキップ
SPCX Tools

JWTエンコーダー

ブラウザ上でHMACベースのJSON Web Token(JWT)を即座に生成・署名できます。

ローカルで動作 — ファイルは端末から出ません

ツールを読み込み中…

JWTエンコーダーの使い方

  1. 1使用するHMAC署名アルゴリズム(HS256、HS384、HS512)を選択します。
  2. 2JSONペイロードを編集します。クイックボタンを使って、iatやexpなどの標準クレームに現在時刻を挿入できます。
  3. 3シークレットキーを入力します。Base64エンコードされたシークレットを使用する場合は、「Base64」にチェックを入れます。
  4. 4入力に合わせて署名済みトークンが自動的に更新されます。「コピー」をクリックして完成したJWTを取得します。

セキュアでローカルなJWTエンコーダー

このJWTエンコーダーを使用すると、開発者はブラウザ上で直接JSON Web Tokenをすばやく作成、編集、署名できます。認証フローの構築、APIエンドポイントのテスト、マイクロサービスのデバッグなどにおいて、カスタムスクリプトを書いたり外部サーバーに認証情報を送信したりすることなく、その場で有効なトークンを生成可能です。

このツールはブラウザ標準のWeb Crypto APIを使用しているため、データの処理や暗号化署名はすべてお使いのデバイス上で完結します。JSONペイロードやシークレットキーが外部にアップロード、保存、ログ記録されることは一切ありません。このローカルファーストな設計により、機密性の高い開発環境やステージング環境の認証情報を扱う場合でも、オンラインで安全にJWTに署名できます。

JWTトークンの作成方法

JWTトークンを作成するには、ヘッダー(アルゴリズムを定義)、ペイロード(データを含む)、シークレットキー(トークンを保護)の3つの要素が必要です。

まず、アルゴリズムを選択します。このツールは、強力なHS256 JWT生成ツールとして機能するだけでなく、HS384やHS512にも対応しています。これらは対称鍵HMACアルゴリズムであり、トークンの署名と検証に全く同じシークレットキーを使用します。数値が大きいほど(例: 512)ハッシュサイズが大きくなり、トークンの文字列は少し長くなりますが、より強固なセキュリティを実現できます。

次に、テキストエリアでペイロードを定義します。ペイロードは有効なJSON形式である必要があります。JSONの編集やシークレットキーの更新を行うと、ツールがリアルタイムで署名を再計算し、JSON構造に構文エラーがある場合は即座に通知します。ペイロードとシークレットキーを設定すると、完成したトークンをコピーして、アプリケーションのAuthorizationヘッダーやCookieで使用できるようになります。

トークン生成のよくある利用シーン

現代のWeb開発において、信頼できるJWT生成ツールは欠かせません。開発者は、主に以下のようなテストやデバッグの目的でこのツールを利用します。

APIエンドポイントのテスト: PostmanやInsomniaなどのAPIクライアントを使用する際、保護されたルートにアクセスするには有効なBearerトークンが必要です。フロントエンドアプリ全体を起動してログインし、トークンを取得する代わりに、ここで必要なユーザーIDやロールを指定して手動でトークンを生成できます。

認証ロジックのデバッグ: バックエンドがトークンを拒否する場合、手動でトークンを作成することで問題の切り分けに役立ちます。シークレットキーの誤り、不正なペイロード、署名アルゴリズムの不一致などが原因であるかを確認できます。

エッジケースの作成: 期限切れのトークン、クレームの欠落、権限のないロールなどをバックエンドがどう処理するかをテストすることは、セキュリティ上非常に重要です。ここではJSONペイロードを簡単に操作してこれらのエッジケースを作成し、サーバーが正しいHTTPステータスコードを返すかを確認できます。

タイムスタンプとクレームの管理

JSON Web Tokenでは、トークンのライフサイクルやユーザー情報を伝えるために、クレームと呼ばれる特定のフィールドを使用します。時間に関する最も一般的なクレームは、iat(発行日時)とexp(有効期限)です。これらのクレームには、1970年1月1日からの経過秒数であるUnixタイムスタンプを指定する必要があります。

テスト時にこれらのタイムスタンプを手動で計算するのは手間がかかります。作業を効率化するため、このツールのペイロードエディタ上部にはクイックアクションボタンが用意されています。

  • iat = now をクリックすると、現在のUnixタイムスタンプで iat フィールドが即座に挿入または更新されます。
  • exp = +1h または exp = +24h をクリックすると、未来のタイムスタンプが計算され、それに応じて exp フィールドが更新されます。

これにより、生成したトークンが即座に有効となり、サーバーの時刻検証ロジックで予期せず拒否されるのを防ぐことができます。

Base64シークレットの取り扱い

オンラインでJWTに署名する際、よくつまずくのがシークレットキーのエンコード処理です。多くのバックエンドシステムやチュートリアルでは、HMACシークレット用に強力でランダムなバイト配列を生成し、それをBase64文字列として環境変数に保存することが推奨されています。

サーバー側でトークンの署名や検証を行う前に、このBase64文字列を元のバイト列にデコードしている場合、標準的なジェネレーターにBase64文字列をそのまま貼り付けると、無効な署名が生成されてしまいます。これは、ジェネレーターがBase64の文字列をプレーンテキストとして処理し、不一致が生じるためです。

この問題を解決するには、シークレットはBase64エンコード済みのチェックボックスをオンにするだけです。このツールは、HMACハッシュを適用する前にシークレット文字列を元のバイト列にデコードするため、生成される署名がバックエンド環境と完全に一致します。

JWTの構造について

トークンを生成すると、その構造がわかりやすいように色分けして出力されます。標準的なJWTは、ドット(.)で区切られた3つの部分で構成されています。

  1. ヘッダー (赤): トークンのメタデータ(主に署名アルゴリズム。例:{"alg":"HS256","typ":"JWT"})が含まれます。選択したアルゴリズムに基づいて自動的に生成され、Base64URLエンコードされます。
  2. ペイロード (青): 実際のJSONデータで、こちらもBase64URLエンコードされます。この部分はトークンを傍受した人なら誰でも簡単に読み取ることができるため、パスワードや機密性の高いデータは絶対に含めないでください。
  3. 署名 (緑): エンコードされたヘッダーとペイロードの暗号学的ハッシュで、シークレットキーを使用して署名されます。これにより、通信中にトークンが改ざんされていないことが保証されます。

既存のトークンがあり、シークレットキーなしでその内容を確認したい場合は、当サイトのJWTデコーダーに貼り付けることで、ヘッダーとペイロードを安全に確認できます。

よくある質問

対応しているアルゴリズムは何ですか?
現在、HMACベースのアルゴリズム(HS256(HMAC with SHA-256)、HS384、HS512)に対応しています。これらは共通鍵(対称)アルゴリズムであり、トークンの署名と検証の両方に同じシークレットキーを使用します。
シークレットキーはサーバーに送信されますか?
いいえ。暗号化による署名はすべて、Web Crypto APIを使用してブラウザ内でローカルに処理されます。JSONペイロードやシークレットキーがデバイス外部へ送信されることはないため、テスト用トークンを安全に生成できます。
Base64チェックボックスの役割は何ですか?
多くのバックエンドフレームワークでは、JWTのシークレットはプレーンテキストではなくBase64エンコードされた文字列として保存されます。このチェックボックスをオンにすると、HMACアルゴリズムを適用する前に入力値が元のバイトデータにデコードされるため、サーバー側が想定する署名と正確に一致するようになります。
時刻ボタンはどのように機能しますか?
iat(発行日時)およびexp(有効期限)のボタンは、標準のUnixタイムスタンプ(1970年1月1日からの経過秒数)をJSONペイロードに挿入します。これにより、現在のエポック秒を手動で調べたり計算したりする手間が省けます。
サーバーで検証した際にトークンが無効になるのはなぜですか?
よくある原因として、シークレットキーの不一致、アルゴリズムの誤り、またはシークレットのエンコード方式の不一致が挙げられます。まったく同じシークレット文字列を使用しているか確認し、署名前にサーバー側でシークレットのBase64デコードが必要かどうかも確認してください。