JWT(JSON Web Token) - daniel-qa/Vue GitHub Wiki

JWT(JSON Web Token)可以把它想成一句話:

一種「可攜帶身分資訊、並可驗證真偽」的字串 token

它常用在 SPA + API 架構的登入系統。

JWT 是什麼(核心概念)

JWT 是一段被「簽名過」的 JSON 資料:

xxxxx.yyyyy.zzzzz

它不是亂碼,而是由三段組成:

1️⃣ Header(標頭)

{
  "alg": "HS256",
  "typ": "JWT"
}

👉 說明:

用什麼演算法簽名(例如 HS256)

2️⃣ Payload(內容)

這是「真正放資料的地方」:

{
  "userId": "U001",
  "role": "teacher",
  "exp": 1710000000
}

👉 常見內容:

userId(使用者身分)
role(角色)
exp(過期時間)

⚠️ 注意:

這裡不是加密,只是 Base64,可以被解碼看到

3️⃣ Signature(簽章)

HMACSHA256(
  base64(header) + "." + base64(payload),
  secretKey
)

👉 用途:

確認 token 有沒有被改過

沒有 secret key 就無法偽造

JWT 的運作流程(很重要)

1. 使用者登入
   ↓
2. Server 驗證帳密
   ↓
3. Server 發 JWT
   ↓
4. Client 存 JWT(localStorage / cookie)
   ↓
5. 每次 API 帶上 JWT
   ↓
6. Server 驗證 JWT
   ↓
7. 取得 userId → 查資料

JWT 的最大特色

✔️ 1. Stateless(無狀態)

Server 不用存 session:

傳來 token → 自己驗證 → 就知道你是誰

✔️ 2. 可跨系統

JWT 可以:

前端 SPA
APP
多個微服務

都共用同一個驗證方式

✔️ 3. 可攜帶資訊

像:

userId
role
permission

JWT vs Session(差異)

項目 JWT Session
存在哪 Client Server
是否無狀態 ✔️
擴展性
登出控制 較麻煩 容易

常見誤解(很重要)

❌ JWT 不是加密

👉 只是 Base64 + 簽章
👉 payload 可以被看到

❌ JWT 不等於安全

安全性取決於:

token 是否被偷
是否有 HTTPS

❌ JWT 不能被「撤銷」(天然限制)

除非你額外做:

blacklist
token version
refresh token 機制

一句工程師版本理解

  • JWT 就是:

「帶著身分證的通行證」

你拿著它去 API

Server 看它真假

看它寫誰就是誰