jwt 2025-01-22
JWTトークン:仕組みとセキュリティベストプラクティス
JSON Webトークンの深掘り - 構造、署名の仕組み、避けるべき一般的なセキュリティの間違い。
JSON Webトークン(JWT)は、当事者間でJSON形式で情報を安全に送信するためのオープンスタンダード(RFC 7519)です。
JWTの構造
JWTはドットで区切られた3つの部分で構成されます:
1. ヘッダー
{
"alg": "HS256",
"typ": "JWT"
}
2. ペイロード(クレーム)
{
"sub": "1234567890",
"name": "John Doe",
"exp": 1516242622,
"role": "admin"
}
標準クレーム:
iss(発行者)sub(主体)exp(有効期限)iat(発行日時)
3. 署名
ヘッダーとペイロードを秘密鍵で署名します。
JWT認証の仕組み
1. ユーザーが資格情報をサーバーに送信
2. サーバーが資格情報を検証しJWTを作成
3. JWTがクライアントに送信される
4. クライアントが後続のリクエストにJWTを含める
5. サーバーがJWT署名を検証しリクエストを処理
セキュリティベストプラクティス
すべきこと:
- 短い有効期限を設定
- すべてのJWT送信にHTTPSを使用
- すべてのクレームを検証
- HttpOnlyクッキーにトークンを保存
すべきでないこと:
- ペイロードに機密データを保存
- 本番環境で
noneアルゴリズムを使用 - localStorageにJWTを保存
- 有効期限のないトークンを作成
JWTデコーダーツールでJWTトークンをデコード・検査できます。