JWT vs 工作階段:2025 年選擇哪一個?

12 min read
JWT, Security, Authentication

理解認證方法

在 2025 年,開發者繼續在 JWT(JSON Web Token)和傳統基於工作階段的認證之間進行辯論。兩種方法都有其優點和權衡,正確的選擇取決於您的特定使用案例、架構和安全需求。本文提供了全面的比較,幫助您做出明智的決定。

基於工作階段的認證

傳統的基於工作階段的認證已經存在了幾十年,並且仍然廣泛使用。

運作原理

  1. 使用者提供憑證(使用者名稱/密碼)
  2. 伺服器驗證憑證並建立工作階段
  3. 工作階段 ID 儲存在伺服器端(記憶體、資料庫、Redis)
  4. 工作階段 ID 作為 cookie 傳送給客戶端
  5. 客戶端在後續請求中傳送 cookie
  6. 伺服器查詢工作階段儲存以驗證工作階段

優點

  • ✅ 立即撤銷:可以立即使工作階段失效
  • ✅ 簡單實施:大多數框架內建支援
  • ✅ 較小的請求大小:只傳送工作階段 ID
  • ✅ 伺服器端控制:對工作階段資料的完全控制

缺點

  • ❌ 伺服器端儲存:需要記憶體/資料庫儲存
  • ❌ 擴充挑戰:跨多個伺服器的工作階段共享
  • ❌ CORS 複雜性:跨域請求的 Cookie 處理
  • ❌ 行動應用程式限制:原生應用程式中的 Cookie 處理

JWT 認證

JWT 提供了一種無狀態的認證方法,在微服務和分散式系統中越來越受歡迎。

運作原理

  1. 使用者提供憑證
  2. 伺服器驗證並產生簽章的 JWT
  3. JWT 傳送給客戶端
  4. 客戶端儲存 JWT(localStorage、記憶體、cookie)
  5. 客戶端在 Authorization 標頭中傳送 JWT
  6. 伺服器驗證 JWT 簽章和聲明

優點

  • ✅ 無狀態:無需伺服器端工作階段儲存
  • ✅ 可擴充:非常適合微服務架構
  • ✅ 跨域友好:在標頭中輕鬆傳送
  • ✅ 行動應用程式友好:原生支援權杖
  • ✅ 解耦:認證與應用程式分離

缺點

  • ❌ 無法撤銷:權杖在過期前有效
  • ❌ 較大的大小:包含所有使用者資料
  • ❌ 安全考量:需要仔細處理和儲存
  • ❌ 複雜性:需要權杖重新整理邏輯

詳細比較

效能比較

方面 工作階段 JWT
資料庫查詢 每個請求 無
網路負載 小(~50 位元組) 大(~500-2000 位元組)
CPU 使用 低 中等(簽章驗證)
記憶體使用 高(工作階段儲存) 低

安全比較

威脅 工作階段 JWT
XSS 透過 HttpOnly cookies 受保護 如果在 localStorage 中易受攻擊
CSRF 易受攻擊(需要 CSRF 權杖) 如果不使用 cookies 則免疫
重播攻擊 工作階段 ID 輪換 需要短過期時間
權杖/工作階段劫持 可以立即撤銷 在過期前有效

何時使用工作階段

  • 📌 單體應用程式與單一伺服器
  • 📌 需要立即工作階段撤銷
  • 📌 處理敏感資料需要嚴格控制
  • 📌 簡單的傳統網頁應用程式
  • 📌 有限的客戶端儲存需求

何時使用 JWT

  • 📌 微服務架構
  • 📌 單頁應用程式 (SPA)
  • 📌 行動應用程式
  • 📌 跨域 API 請求
  • 📌 無狀態的 RESTful API
  • 📌 需要水平擴充

混合方法

許多現代應用程式使用混合方法:短期 JWT 配合儲存為安全 HTTP-only cookie 的重新整理權杖。這結合了兩種方法的優點。

Share this article

Back to Blog