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 Encoder / Decoderを開く
- JWTトークンを入力欄に貼り付ける
- ヘッダー・ペイロード・署名が自動的にデコードされ、整形されたJSONで表示される
expクレームから有効期限を確認する- 必要に応じて署名の検証を行う
よくある質問
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の各パートのエンコードに使用