qktools

JWTを理解する:構造、用途、およびセキュリティの要点

公開日 2026-06-06

ログイン後、サーバーは「あなたがあなたである」ことをどうやって知りますか?現代のWebアプリケーションでは、JWTを用いて身元情報を伝えることが一般的です。JWTの構造と原理を理解することは、認証システムの開発とデバッグに重要です。このチュートリアルでは、分かりやすい方法でJWTを説明します。

JWTとは何か

JWTはJSON Web Tokenの略で、各当事者間で情報を安全に伝達するためのコンパクトなトークン形式です。最も一般的な用途は認証です:ユーザーがログインすると、サーバーはJWTを発行し、その後クライアントは各リクエスト時に身元を証明するためにそれを添付します。

3部構造

JWTは3つの部分で構成され、ドットで接続されています:Header(ヘッダー)、Payload(ペイロード)、Signature(署名)。形はxxxxx.yyyyy.zzzzzのようになります。

Headerはトークンの種類と署名アルゴリズムを記述します;Payloadはクレーム(claims)を格納し、例:ユーザーID、発行時間 iat、有効期限 exp;Signatureはキーを使用して前2部分に署名し、改ざん防止に使用されます。

Payloadは暗号化されていない

重要な誤解:HeaderとPayloadはBase64Urlエンコードされているだけで、暗号化されていません。誰でもJWTを取得すれば、Payloadの中身をデコードして見ることができます。

したがって、Payloadにパスワードや銀行カード番号などの機密情報を絶対に置いてはいけません。署名は内容が改ざんされていないことを保証するだけで、内容の秘密保持は保証しません。

署名はどのように改ざんを防ぐか

署名はサーバーが保持するキーを使用してHeaderとPayloadから計算されます。誰かがPayloadを変更した場合(例えばユーザーIDを他の人に変更すると)、再計算された署名は一致せず、サーバーはこれを無効と判断します。

まさに署名の検証にはキーが必要であるため、純粋なクライアントツールは「デコードして見る」ことはできますが、「署名を検証する」ことはできません。これは正常で安全な設計です。

JWTのデバッグに役立つ方法

デバッグ時には、JWTの中に何が格納されているかを確認する必要があります。qktoolsのJWT解析ツールを使えば、トークンを貼り付けるだけでローカルでHeaderとPayloadをデコードでき、有効期限を読みやすい時間に自動変換し、期限切れかどうかを表示します。トークンはアップロードされません。

Base64Urlエンコードをさらに理解したい場合は、Base64に関する記事を読むか、Base64エンコード/デコードツールを使用して試してみてください。

関連ツール