「JWT を localStorage に置くな」はなぜ言われるのか¶
──Cookie 回帰までの時系列整理
すんごい詳しく書いてある。これは勉強になる。— @pospome
Web セッション管理の 20 年: 4 つの段階¶
| 時期 | 方式 | 主な要因 | 問題点 |
|---|---|---|---|
| 〜2010年代前半 | SSR + Cookie セッション | 同一オリジン構成が主流。HttpOnly Cookie が機能 | スケールしにくい(サーバーにセッション保持) |
| 2017〜2020年 | SPA + localStorage + JWT | SPA 台頭・サードパーティ Cookie 規制・マイクロサービスのステートレス要求 | XSS でトークン全窃取。無効化が困難(ステートレスのジレンマ) |
| 2020年〜 | BFF パターン | Next.js・Nuxt.js・SvelteKit の普及 | CSRF(session riding)への対処が必要 |
| 現在 | Cookie セッションへの回帰 | OAuth BCP(RFC 9700, 2024)・RSC/Server Actions | – |
localStorage + JWT の問題(ステートレスのジレンマ)¶
-
XSS リスク: localStorage は JS からアクセス可能 → XSS でトークン全窃取
-
無効化の困難: JWT はステートレス(サーバーに状態なし)→ 発行後に無効化できない
-
Safari ITP・Chrome SameSite=Lax: サードパーティ Cookie 規制が Cookie 利用を制限
BFF パターンの二層構成¶
(図: SVG)