JWT とは何か - 署名付きトークンの仕組み

入門 | 10分 で読める | 2026.06.14

公式ドキュメント

JWT は署名付きの情報

JWT は JSON Web Token の略です。ざっくり言うと、JSON形式の情報に署名を付けたトークンです。

よくあるJWTは、次のようにドットで3つに分かれています。

xxxxx.yyyyy.zzzzz

左から順に、Header、Payload、Signature です。

部分役割
Header署名アルゴリズムなど
PayloadユーザーID、有効期限などの claims
Signature改ざんされていないことを確認する署名

Header には、JWTの種類や署名アルゴリズムが入ります。

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

alg は署名アルゴリズムです。実装では、許可するアルゴリズムを明示して検証することが重要です。

Payload

Payload には、トークンで伝えたい情報が入ります。

{
  "sub": "user_001",
  "role": "student",
  "iat": 1760000000,
  "exp": 1760003600
}

よく使われる項目には、次のようなものがあります。

claim意味
subSubject。ユーザーIDなど
issIssuer。発行者
audAudience。利用先
iatIssued At。発行時刻
expExpiration Time。有効期限

注意: JWT の Payload は、多くの場合 Base64URL エンコードされているだけです。暗号化ではありません。機密情報をそのまま入れてはいけません。

Signature

Signature は、Header と Payload が改ざんされていないことを確認するための署名です。

サーバは秘密鍵または秘密情報を使って署名します。受け取った側は署名を検証し、改ざんされていないか確認します。

import jwt from "jsonwebtoken";

const token = jwt.sign(
  { sub: "user_001", role: "student" },
  process.env.JWT_SECRET,
  { expiresIn: "15m" }
);

検証側は次のように確認します。

const payload = jwt.verify(token, process.env.JWT_SECRET, {
  algorithms: ["HS256"],
});

署名が合わなければ、トークンは無効です。

JWT の強み

JWT の大きな強みは、署名検証だけでトークンの正当性を確認できることです。

サーバ側セッションでは、毎回セッションストアを見ます。

session_id -> Redis / DB -> user情報

JWTでは、署名と有効期限を見ます。

JWT -> 署名検証 -> Payloadを信頼

この性質により、複数のAPIサーバやマイクロサービスで認証情報を共有しやすくなります。

JWT の弱み

一方で、JWT は「発行したあとに取り消しにくい」という弱点があります。

署名が正しく、有効期限内であれば、サーバはそのトークンを有効と判断します。ユーザーがログアウトしても、すでに盗まれたJWTが有効期限内なら使われる可能性があります。

これを防ぐには、ブラックリスト、トークンバージョン、短い有効期限などの工夫が必要になります。

課題対策
盗まれたJWTが使われる有効期限を短くする
ログアウト後も有効ブラックリストやセッション管理を使う
Payloadが読める機密情報を入れない、必要ならJWEを検討
鍵が漏れる鍵管理、ローテーション

JWT はどこで使うべきか

JWT は便利ですが、どこに置くかが重要です。

近年は、ブラウザにJWTを直接持たせるより、BFFやサーバ側にJWTを閉じ込め、ブラウザには HttpOnly Cookie だけを持たせる設計が増えています。

境界よくある選択
Browser ↔ BFFHttpOnly Cookie
BFF ↔ APIJWT / OAuth access token
Service ↔ ServiceJWT / mTLS

ポイント: JWT が悪いのではありません。ブラウザに高価値なJWTを読める形で置くことが危険なのです。

まとめ

JWT は、Header、Payload、Signature からなる署名付きトークンです。

  • Payload は暗号化ではなく、読まれる前提で設計する
  • Signature は改ざん検出のためにある
  • 署名検証だけで認証できるため、サーバ間で使いやすい
  • 盗まれると有効期限まで使われる可能性がある
  • ブラウザに置く場合は保存場所を慎重に選ぶ

既存の詳しい解説は JWTの仕組み - トークンベース認証を理解しよう も参照してください。

参考リソース

  • 公式ドキュメント - JWT とは何か - 署名付きトークンの仕組み を確認するための一次情報

次に読む記事

← 一覧に戻る
PR
PR
PR
PR