コンテンツにスキップ

「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)