jwt-security 是做什麼的?
基於最佳實踐的 JWT 認證實施指南,涵蓋 Token 建立、驗證與儲存的安全性。
概述
本指南提供關於 JSON Web Token (JWT) 身份驗證的安全實施建議。遵循這些建議有助於防止常見的安全漏洞,例如 Token 偽造、重放攻擊以及敏感資訊洩露。
核心原則
- 使用強簽名算法:建議使用 RS256(非對稱加密)或 HS256(對稱加密),並確保金鑰長度足夠且安全儲存。
- 設定合理的到期時間:在 Token 中設定
exp聲明,並選擇較短的過期時間(例如 15 分鐘),減少 Token 被盜用的風險。 - 驗證所有必要聲明:必須驗證 Token 的簽名、
iss(發行者)、aud(受眾)及exp(過期時間)等關鍵聲明。 - 安全儲存 Token:避免將 Token 儲存在
localStorage或sessionStorage。建議使用 HTTP-only、Secure 及 SameSite 屬性設定的 Cookie 來防止跨站腳本攻擊 (XSS)。 - 使用 HTTPS:所有涉及 Token 傳輸的請求必須透過 HTTPS 進行,以防止中間人攻擊。
實作指引
建立 Token
import jwt
import datetime
payload = {
"sub": "user123",
"iat": datetime.datetime.utcnow(),
"exp": datetime.datetime.utcnow() + datetime.timedelta(minutes=15),
"iss": "my-app",
"aud": "my-api"
}
token = jwt.encode(payload, "your-256-bit-secret", algorithm="HS256")
驗證 Token
try:
decoded = jwt.decode(token, "your-256-bit-secret", algorithms=["HS256"], audience="my-api", issuer="my-app")
except jwt.ExpiredSignatureError:
print("Token 已過期")
except jwt.InvalidTokenError:
print("無效的 Token")
支援的平台
此指南適用於所有支援 JWT 的開發平台,包括但不限於 Node.js、Python、Java、Go 及 .NET。