☕ NEW! 完成新手任務即可參加抽獎!LINE 星巴克禮券等你拿,名額有限!        🎉 推廣活動:邀請好友註冊 DevLearn,累積推薦抽 LINE 星巴克禮券! 活動詳情 →        🔥 活動期間 2026/4/1 - 5/31 |已有 0 人參加       
concept-arch 中級

認證 vs 授權:Session / JWT / OAuth

認證(Authentication)vs 授權(Authorization)

認證 = 你是誰?(登入)
授權 = 你能做什麼?(權限)

比喻:
認證 = 公司門禁卡(證明你是員工)
授權 = 門禁卡上的權限(你能進哪些樓層)

Session-based 認證

1. 使用者登入 → 伺服器建立 Session(存在記憶體/Redis)
2. 回傳 Session ID(放在 Cookie)
3. 每次請求帶 Cookie → 伺服器查 Session 確認身份

優點:
- 伺服器有完全控制權(可以即時踢人下線)
- Cookie 自動帶,前端不用管

缺點:
- 伺服器要存 Session → 多台伺服器要共享(Redis)
- 不適合手機 App(Cookie 支援差)
- CSRF 攻擊風險(Cookie 自動帶)

JWT(JSON Web Token)認證

1. 使用者登入 → 伺服器產生 JWT Token
2. 回傳 Token → 前端自己存(localStorage / memory)
3. 每次請求帶 Authorization: Bearer <token>
4. 伺服器驗證 Token 簽名 → 不需要查 DB

JWT 結構:
xxxxx.yyyyy.zzzzz
 ↓      ↓      ↓
Header.Payload.Signature

Payload 裡面有:
{ sub: "user123", name: "小明", role: "admin", exp: 1700000000 }
優點:
- 無狀態(伺服器不需要存 Session)
- 跨域 / 手機 App 友善
- 可以放自訂資料(Claims)

缺點:
- 無法即時撤銷(Token 發出後直到過期前都有效)
- Token 被偷就完了(要設短過期時間 + Refresh Token)
- 放 localStorage 有 XSS 風險

OAuth 2.0

場景:「用 Google 登入」

你的網站不需要知道使用者的 Google 密碼
→ 使用者去 Google 登入
→ Google 回傳授權碼(Authorization Code)
→ 你的後端用授權碼換 Access Token
→ 用 Access Token 取得使用者資料

四種授權流程:
1. Authorization Code(最安全,後端用)
2. PKCE(前端 SPA 用)
3. Client Credentials(伺服器對伺服器)
4. Password(已棄用)

比較總覽

Session JWT OAuth 2.0
狀態 有狀態(伺服器存 Session) 無狀態 看實作
適合 傳統 MVC 網站 SPA、手機 App、API 第三方登入
能即時撤銷? ✅ 刪 Session ❌ 要等過期 看實作
跨域? ❌ Cookie 限制 ✅ Header 帶
安全風險 CSRF XSS(若存 localStorage) 設定複雜

你的 DevLearn 用的是 Cookie + Session 模式(BCrypt 密碼 + 登入 Cookie),這對 MVC 網站是最適合的。

💡 大家的想法 · 0

載入中...
💬 即時聊天室 🟢 0 人在線
😀 😎 🤓 💻 🎮 🎸 🔥
➕ 新問題
📋 我的工單
💬 LINE 社群
🔒
需要註冊才能使用此功能
註冊帳號即可解鎖測驗、遊戲、簽到、筆記下載等所有功能,完全免費!
免費註冊