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 看它真假
看它寫誰就是誰