セキュリティ
上級

JWT (JSON Web Token・RFC 7519)(ジョット)

IETF 2015年5月標準化のJSON ベース認証Token フォーマット。Header.Payload.Signature 3部構成・Stateless 認証・OAuth 2.0 / OIDC ID Token の標準。

0 回閲覧
0 いいね
2026/5/15 更新
関連タグ
認証
JWT
JSON

概要

JWT (JSON Web Token・「ジョット」発音) はIETF が2015年5月にRFC 7519 で標準化した、JSON ベース認証Token フォーマット。Michael B. Jones (Microsoft) 主導・OAuth 2.0 / OpenID Connect エコシステムでの認証Token として広範採用。Header.Payload.Signature の3部構成 (Base64URL 各エンコード・「.」区切り)・JWS (JSON Web Signature・RFC 7515) で署名・JWE (JSON Web Encryption・RFC 7516) で暗号化可能。Stateless 認証 (サーバセッション保存不要) で大規模Web アプリ・マイクロサービス間通信に最適、現代Web認証の中核。

JWT 構造

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFsaWNlIiwiaWF0IjoxNzM1Njg2MDAwfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

3部構成 (「.」区切り・各Base64URL エンコード):

  1. Header (アルゴリズム情報):
{
  "alg": "HS256",
  "typ": "JWT"
}
  1. Payload (Claims):
{
  "sub": "1234567890",
  "name": "Alice",
  "iat": 1735686000,
  "exp": 1735689600
}
  1. Signature (改竄検知):
HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)

主要署名アルゴリズム (alg)

アルゴリズム種別用途
HS256対称 HMAC-SHA256単一サーバ・最も簡単
HS384対称 HMAC-SHA384より強い
HS512対称 HMAC-SHA512最強対称
RS256非対称 RSA-SHA256API分散・公開鍵検証
RS384 / RS512非対称 RSA-SHAxxx同
ES256非対称 ECDSA P-256軽量・高速
ES384 / ES512非対称 ECDSA Pxxx同
EdDSA非対称 Ed25519最新推奨
noneなし絶対禁止 (CVE多数)

Standard Claims

JWT 標準Claim (Payload):

Claim内容
issIssuer (発行者)
subSubject (主体・ユーザID)
audAudience (対象API)
expExpiration Time
nbfNot Before
iatIssued At
jtiJWT ID (一意 / 再利用防止)

OIDC ID Token (JWT) 例

OpenID Connect の ID Token はJWT 形式:

{
  "iss": "https://accounts.google.com",
  "sub": "112345678901234567890",
  "aud": "your-app-client-id",
  "exp": 1735689600,
  "iat": 1735686000,
  "email": "[email protected]",
  "email_verified": true,
  "name": "Alice Smith",
  "picture": "https://lh3.googleusercontent.com/..."
}

サーバが署名検証して安全にユーザ情報取得可能。

JWT の主要利点

項目Cookie SessionJWT
Stateless× (サーバセッション必要)◎
スケーラビリティサーバ間共有困難ロードバランス容易
マイクロサービス中央セッションStore 必要Token 自体に情報内蔵
Mobile / APICookie 非対応◎
改竄耐性サーバ管理署名で防止
取消即時 (DB削除)困難 (有効期限まで)

JWT の課題

課題対策
取消困難短期Token (15分) + Refresh Token
「alg: none」攻撃none 拒否 + alg whitelist
XSS 攻撃 (localStorage 漏洩)HttpOnly Cookie 推奨
Token サイズ大Cookie容量制限 4KB に注意
機密情報漏洩Payload は Base64 だけで読める (暗号化なし)
Replay 攻撃jti + Blacklist or short exp

主要利用シーン

用途採用
OAuth 2.0 Access TokenGoogle / GitHub / Auth0
OIDC ID Token全主要IdP
API AuthenticationRESTful API / GraphQL
Microservices間 認証gRPC + JWT Metadata
SPA / Mobile アプリReact / Vue / iOS / Android
Single Page App SessionlocalStorage / HttpOnly Cookie
Server-to-ServerClient Credentials Flow

主要ライブラリ

言語ライブラリ
Node.jsjsonwebtoken / jose
PythonPyJWT / python-jose
Javajjwt / nimbus-jose-jwt
Gogolang-jwt / go-jose
Rustjsonwebtoken
C# / .NETSystem.IdentityModel.Tokens.Jwt
Rubyruby-jwt
PHPfirebase/php-jwt

jwt.io デバッガ

Auth0 が運営する https://jwt.io はJWT 学習・デバッグの定番:

  • Token を貼り付けてHeader / Payload / Signature を可視化
  • 署名アルゴリズム別検証
  • 全ライブラリ一覧
  • Token 生成試験

関連用語との違い

  • vs Session: Stateless / Stateful
  • vs Bearer Token: JWT は具体的フォーマット
  • vs OAuth 2.0 Token: 形式は不定だが多くはJWT

FAQ

Q1: なぜ「ジョット」発音? A: RFC 7519 のIESG (Internet Engineering Steering Group) 議論で「JWT」発音は「ジョット」(jot) と決定。「ジェイ・ダブリュー・ティー」は誤り (公式)。

Q2: 機密情報をPayload に? A: 入れるべきでない。Payload はBase64 のみで暗号化なし・誰でも読める。機密情報必要なら JWE (暗号化Token) 使用。

Q3: Cookie vs localStorage 保存? A: HttpOnly + Secure Cookie 推奨 (XSS耐性)。localStorage はXSS で漏洩リスク・SPAでもCookie + CSRF Token 構成が現代推奨。

この記事について
カテゴリーセキュリティ
難易度上級
作成日2026/5/15