お気に入り

開発者向けツール

InoTools Blog
カテゴリ:チュートリアル

JWTとは?JSON Web Tokenの仕組みと使い方

WebアプリケーションやAPIの認証でよく使われるJWT。その仕組みを理解して、安全に活用する方法を学びましょう。

JWTとは何か?

JWT(JSON Web Token)は、当事者間で情報を安全に伝達するためのオープン標準(RFC 7519)です。デジタル署名付きのJSONデータをコンパクトなトークンとして表現します。

JWTは主に以下の用途で利用されます:

  • 認証(Authentication) — ユーザーがログイン後、サーバーがJWTを発行し、以降のリクエストでトークンを検証
  • 情報交換(Information Exchange) — 署名によりデータの改ざんを検知できるため、信頼できるデータ交換が可能
  • 認可(Authorization) — ユーザーの権限情報をトークンに含めて、アクセス制御に利用

JWTの構造

JWTは ドット(.)で区切られた3つのパート で構成されます:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

1. ヘッダー(Header)

署名アルゴリズムとトークンのタイプを指定します。

{
  "alg": "HS256",
  "typ": "JWT"
}

2. ペイロード(Payload)

ユーザー情報やメタデータ(クレーム)を含みます。

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022,
  "exp": 1516242622
}

標準的なクレームには以下があります:

  • sub — Subject(対象者)
  • iat — Issued At(発行日時)
  • exp — Expiration Time(有効期限)
  • iss — Issuer(発行者)
  • aud — Audience(対象者)

3. 署名(Signature)

ヘッダーとペイロードを結合し、秘密鍵で署名したものです。トークンの改ざん検知に使用されます。

HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)

なぜJWTが必要か?

従来のセッションベース認証では、サーバー側でセッション情報を保持する必要がありました。JWTを使うことで、以下の課題を解決できます:

  • スケーラビリティの問題 — セッションストアが不要になり、サーバーの水平スケーリングが容易に
  • マイクロサービス間の認証 — 各サービスが独立してトークンを検証可能
  • モバイルアプリとの連携 — Cookieに依存しない認証方式

JWTを使うメリット

  • ステートレス認証 — サーバー側でセッション管理が不要で、リクエストごとにトークンを検証するだけ
  • クロスドメイン対応 — Authorization ヘッダーで送信するため、CORS制約に強い
  • コンパクト — URLやHTTPヘッダーに含めやすいサイズで、ネットワーク負荷が小さい
  • 自己完結型 — トークン自体にユーザー情報を含むため、データベースへの問い合わせを削減

JWTの解析を行うには

JWTの解析は 本サイトの「JWT Encoder / Decoder」で簡単に行えます。すべての処理はブラウザ内で完結し、トークンが外部サーバーへ送信されることはありません。登録不要・完全無料でご利用いただけます。

JWTデコーダーでいますぐ解析する

ツールの使い方

  1. JWT Encoder / Decoderを開く
  2. JWTトークンを入力欄に貼り付ける
  3. ヘッダー・ペイロード・署名が自動的にデコードされ、整形されたJSONで表示される
  4. exp クレームから有効期限を確認する
  5. 必要に応じて署名の検証を行う

よくある質問

Q. JWTは暗号化されていますか?

A. 標準のJWT(JWS)は署名されていますが暗号化はされていません。ペイロードはBase64URLデコードすれば誰でも読めます。機密データはペイロードに含めないでください。暗号化が必要な場合はJWE(JSON Web Encryption)を使用します。

Q. JWTの有効期限はどこで確認できますか?

A. ペイロード内の exp(Expiration Time)クレームで確認できます。値はUnixタイムスタンプ形式(エポック秒)です。本サイトのUnixタイムスタンプ変換ツールで人間が読める日時に変換できます。

Q. JWTトークンは改ざんできますか?

A. ペイロードの内容は変更できますが、正しい秘密鍵を知らなければ有効な署名を生成できません。サーバー側で署名を検証することで、改ざんを検知できます。

関連用語

  • JWT (JSON Web Token) — コンパクトで自己完結型のトークン形式。RFC 7519で標準化
  • JWS (JSON Web Signature) — 署名付きのJWT。最も一般的な形式
  • JWE (JSON Web Encryption) — 暗号化されたJWT。ペイロードの機密性を保護
  • クレーム (Claims) — トークンに含まれる情報(ユーザーID、権限、有効期限など)
  • 署名 (Signature) — トークンデータの改ざんを検知する仕組み
  • Base64URL — URLセーフなBase64エンコーディング。JWTの各パートのエンコードに使用