認証技術解説──JWT をセッション管理に使うべきではない理由と代替案
JWT の設計思想は短命なトークン交換に限定されており、永続的なセッション管理には Cookie ベースのステートフルな実装がセキュリティと柔軟性の観点で優れている。
リリース: 2019-04-13 · 読了 3 分記事の要約
1. 核心(What)
- JWT 仕様は 5 分以下の短命なトークン利用を前提として設計されている
- Google などの大規模サービスはブラウザのセッション管理に JWT ではなく標準的な Cookie を採用している
- PASETO は JWT のセキュリティ上の脆弱性を克服するために設計された代替仕様である
- Node.js (Express) 等のフレームワークでは express-session ミドルウェアによるセッション管理が推奨される
2. 影響(Why)
- 「ステートレス認証」という誤解に基づいた JWT の過剰な利用は、セキュリティホールと実装の複雑化を招くため、セッション管理は DB を活用した標準的な Cookie 方式に回帰すべきである。
- 認証情報の保存先として localStorage を使用することは XSS 攻撃に対して脆弱であり、HttpOnly Cookie を利用したセッション管理が実務上の安全なデフォルトとなる。
- 開発者への影響: 認証設計を担当するテックリードは、プロダクトのセッション管理において JWT の採用を見直し、既存のセッションストア(Redis や Postgres 等)を活用した構成へ移行することで、トークンの無効化やリフレッシュ処理の複雑さを排除できる。
- 日本への影響: 国内の受託開発や自社プロダクト開発を行う中規模チームは、安易な JWT 採用による認証不備を避けるため、認証基盤の設計レビューにおいて「セッション管理は Cookie」を基本方針に置くべきである。
3. 根拠・詳細(How)
- Stop using JWTs (2019-04-13 公開)