alltools.one
Security
2026-02-14
9 min
alltools.one Team
jwtauthenticationsecurityapitokens

JWTトークン解説:構造、セキュリティ、ベストプラクティス

JSON Web Tokensは、ほぼすべてのモダンな認証システムに登場します。Authorizationヘッダーにあるあの長い文字列 — eyJhbGciOiJIUzI1NiIs... — はJWTであり、その中身と仕組みを理解することは、安全なアプリケーションを構築するために不可欠です。

JWTとは?

JWTは、2つの当事者間でクレーム(データ)を運ぶコンパクトでURLセーフなトークンフォーマットです。自己完結型であり、トークン自体がその真正性を検証し、ユーザーデータを抽出するために必要な情報を保持しているため、データベースへの問い合わせが不要です。

当サイトのJWTエンコーダー/デコーダーで任意のJWTを即座にデコードできます。トークンを貼り付けると、ヘッダー、ペイロード、署名が分解して表示されます。

JWTの構造:3つのパート

すべてのJWTは、ドットで区切られた3つのBase64URLエンコードされたパートで構成されます:

header.payload.signature

ヘッダー

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

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

ペイロード

{
  "sub": "user123",
  "name": "Alex Chen",
  "role": "admin",
  "iat": 1708963200,
  "exp": 1709049600
}

クレーム — 実際のデータを含みます。標準的なクレームには sub(サブジェクト)、iat(発行日時)、exp(有効期限)があります。

署名

エンコードされたヘッダーとペイロードを秘密鍵で署名することで作成されます。これにより改ざんが防止され、いかなる変更も署名を無効にします。

JWT認証の仕組み

  1. ユーザーが認証情報でログインする
  2. サーバーがユーザーのクレームを含むJWTを作成し、署名する
  3. サーバーがJWTをクライアントに返す
  4. クライアントが以降のリクエストでAuthorizationヘッダーにJWTを送信する
  5. サーバーが署名を検証してクレームを抽出する — データベースクエリは不要

セキュリティのベストプラクティス

常に署名を検証する

署名を検証せずにJWTを信頼してはいけません。開発中は当サイトのJWTデコーダーでペイロードをデコードして確認できますが、本番環境では必ず暗号学的に検証してください。

短い有効期限を設定する

JWTは一度発行されると取り消すことができません(セッショントークンとは異なります)。有効期限を短く設定し(15〜60分)、より長いセッションにはリフレッシュトークンを使用しましょう。

適切なアルゴリズムを選択する

  • HS256 — SHA-256によるHMAC、対称鍵。シンプルで高速、単一サーバーアプリに最適
  • RS256 — SHA-256によるRSA、非対称鍵。複数のサービスがトークンを検証する分散システムに適している
  • "none"は絶対に使用しないalg: "none" の脆弱性は実際のセキュリティ侵害を引き起こしています

秘密鍵を保護する

JWTの署名鍵は認証システムのマスターキーです。安全に保管し、定期的にローテーションし、クライアント側のコードに決して公開してはいけません。

ペイロードに機密データを保存しない

JWTのペイロードはBase64エンコードされているだけで、暗号化されていません。誰でもデコードできます。パスワード、クレジットカード番号、秘密情報を絶対に含めないでください。

よくあるJWTの間違い

  1. 有効期限を検証しないexp クレームを必ずチェックしましょう
  2. JWTをlocalStorageに保存する — XSS攻撃に脆弱です。代わりにhttpOnly Cookieを使用しましょう
  3. トークンが大きすぎる — JWTはすべてのリクエストヘッダーに含まれます。ペイロードは軽量に保ちましょう
  4. HTTPSを使用しない — HTTP経由で送信されたJWTは傍受される可能性があります

よくある質問

JWTを取り消すことはできますか?

直接的にはできません — JWTはステートレスです。回避策としては、短い有効期限の設定、トークンブラックリスト、署名鍵の変更(すべてのトークンが無効になります)があります。

セッションにJWTを使うべきですか?

JWTはAPI認証やマイクロサービスに適しています。従来のWebセッションには、Cookieを使ったサーバーサイドセッションの方がシンプルで安全な場合が多いです。

JWTとOAuthの違いは?

OAuthは認可フレームワークです。JWTはトークンフォーマットです。OAuthはアクセストークンとしてJWTを使用できますが、解決する問題は異なります。

関連リソース

Published on 2026-02-14
JWT Tokens Explained: Structure, Security, Best Practices | alltools.one