API Academy
🌐 繁體中文
  • 🌐 English
  • 🌐 繁體中文
HomePetstore APIExplore more APIs
HomePetstore APIExplore more APIs
🌐 繁體中文
  • 🌐 English
  • 🌐 繁體中文
🌐 繁體中文
  • 🌐 English
  • 🌐 繁體中文
  1. API Security
  • 歡迎
  • 目錄
  • API 學院
    • Get Started
      • 什麼是 API?
      • API 如何運作?
      • 如何呼叫 API?
      • 如何閱讀 API 文件?
      • 章節總結
    • API Fundamentals
      • API 基礎知識:概覽
      • 方法與路徑
      • 參數
      • 請求 Body
      • 回應
      • API 規格與 OAS
      • 章節總結
    • Working with APIs
      • 使用 API:概覽
      • 根據規格發送請求
      • 環境與變數
      • 串聯多個端點
      • 處理 Auth
      • 處理 API 簽名
      • 腳本介紹
      • 章節總結
    • Mocking APIs
      • Mocking API:概覽
      • Smart Mock
      • Mock 預期結果
      • Cloud Mock
      • Mock 腳本
      • 章節總結
    • Designing APIs
      • 設計 API:概覽
      • API 設計介紹
      • 建立您的第一個 API 專案
      • 分析需求並規劃您的 API
      • 設計資料模型
      • 設計端點
      • 使用組件與可重用性
      • 設定與 Auth
      • API 設計指南
      • 章節總結
    • Developing APIs
      • 開發 API:概覽
      • 設定:安裝您的 AI 程式碼助手
      • 快速入門:30 分鐘內從規格到運行的 API
      • 了解生成的程式碼
      • 使用 Apidog 測試您的 API
      • 部署:將您的 API 上線
      • 章節總結
    • Testing APIs
      • 測試 API:概覽
      • 快速入門:您的第一個測試場景
      • 整合測試與資料傳遞
      • 動態值
      • 斷言與驗證
      • 流程控制:If, For, ForEach
      • 資料驅動測試
      • 性能測試
      • 測試報告與分析
      • CI/CD 整合
      • 排程任務與自動化
      • 進階測試策略
      • 章節總結
    • API Documentations
      • API 文件:概覽
      • 發布您的第一個 API 文件
      • 自訂文件外觀
      • 給消費者的互動功能
      • 進階發布設定
      • 管理 API 版本
      • 章節總結
    • Advanced API Technologies
      • 進階 API 技術:概覽
      • GraphQL
      • gRPC
      • WebSocket
      • Socket.IO
      • Server-Sent Events
      • SOAP
      • 章節總結
    • API Lifecycle
      • API 生命周期:概覽
      • API 生命周期的階段
      • API 治理
      • API 安全最佳實踐
      • 監控與分析
      • API 版本策略
      • API 的未來
      • 章節總結
    • API Security
      • API 安全性:概覽
      • API 安全性基礎知識
      • 身份驗證 vs. 授權
      • 了解 OAuth 2.0 和 OpenID Connect
      • JSON Web Tokens (JWT)
      • OWASP API 安全 Top 10
      • 加密與 HTTPS
      • 章節總結
    • API Tools
      • API 工具:概覽
      • API 工具的演變
      • API Clients
      • 命令列工具 (cURL, HTTPie)
      • API 設計和文件工具
      • API Mocking 工具
      • API 測試工具
      • 一體化 API 平台
      • 章節總結
    • API Gateway
      • API Gateway:概覽
      • 什麼是 API Gateway?
      • API Gateway 的關鍵功能
      • API Gateway vs 負載平衡器 vs 服務網格
      • 流行 API Gateway 解決方案
      • BFF (Backend for Frontend) 模式
      • 章節總結
HomePetstore APIExplore more APIs
HomePetstore APIExplore more APIs
🌐 繁體中文
  • 🌐 English
  • 🌐 繁體中文
🌐 繁體中文
  • 🌐 English
  • 🌐 繁體中文
  1. API Security

JSON Web Tokens (JWT)

JSON Web Token (JWT)(發音為 "jot")是一種開放標準 (RFC 7519),定義了一種緊湊且自包含的方式,用於在各方之間作為 JSON 物件安全地傳輸資訊。因為它是數位簽名的,所以此資訊可以被驗證和信任。
在 API 世界中,JWT 是 Access Tokens 和 ID Tokens 最常見的格式。

JWT 的結構#

一個 JWT 由點 (.) 分隔的三個部分組成:
Header.Payload.Signature
範例:eyJhbGciOiJIUzI1Ni... .eyJzdWIiOiIxMjM0NTY3ODkw... .SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

1. Header (標頭)#

描述 Token 如何 被簽名。
{
  "alg": "HS256",
  "typ": "JWT"
}

2. Payload (Claims/聲明)#

包含資料(聲明)。有標準聲明和自訂聲明。
{
  "sub": "1234567890",   // 主題 (User ID)
  "name": "John Doe",
  "iat": 1516239022,     // 簽發時間
  "exp": 1516242622,     // 過期時間
  "role": "admin"        // 自訂聲明
}
注意:此資料是 Base64Url 編碼的,不是加密的。任何擁有 Token 的人都可以讀取此資料。不要將機密資訊放在這裡。

3. Signature (簽名)#

要建立簽名部分,您必須獲取編碼的 Header、編碼的 Payload、一個 Secret (密鑰),以及 Header 中指定的演算法,並對其進行簽名。
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
簽名確保 Token 未被更改。

JWT 如何在 API 中運作#

1.
身份驗證:使用者登入。
2.
建立:伺服器建立一個 JWT,並使用 Secret Key(只有伺服器知道)對其進行簽名。
3.
回應:伺服器將 JWT 發送給用戶端。
4.
儲存:用戶端儲存它(通常在 localStorage 或 HttpOnly Cookie 中)。
5.
請求:對於每個後續請求,用戶端在 Authorization Header 中發送 JWT:
Authorization: Bearer <token>
6.
驗證:伺服器接收 Token。它使用其 Secret Key 重新計算簽名。
如果簽名匹配 -> Token 有效且未被篡改。
伺服器使用 Payload 中的資料(例如 user_id)來處理請求。無需查詢資料庫即可檢查會話!

優點和缺點#

優點#

無狀態:伺服器不需要在 RAM 或資料庫中保留會話記錄。有利於可擴展性。
緊湊:小到足以在 URL、POST 參數或 HTTP Header 中傳送。
跨網域:與 CORS 和行動應用程式配合良好。

缺點#

撤銷很困難:由於伺服器不追蹤會話,您無法輕易地在伺服器端將使用者「登出」或在 Token 過期前禁止它。您通常需要「黑名單」(恢復狀態)或較短的過期時間來緩解此問題。
大小:如果您在聲明中放入太多資料,它可能會變大。

安全最佳實踐#

1.
始終使用 HTTPS:否則 Token 可能在傳輸過程中被竊取。
2.
短過期時間:保持 exp 簡短(例如 15 分鐘)並使用 Refresh Tokens。
3.
驗證演算法:確保您的伺服器僅接受您預期的演算法(例如,防止 "none" 演算法攻擊)。

關鍵要點#

JWT 是用於 AuthN 和 AuthZ 的自包含無狀態 Token。
它們是已簽名的(防篡改)但已編碼的(任何人均可讀取),因此永遠不要在 Payload 中放入機密資訊。
在信任聲明之前,始終驗證簽名。
下一步:現在我們知道如何保護存取,讓我們看看攻擊者發現漏洞時會做什麼。OWASP API 安全 Top 10。
Modified at 2025-12-29 09:35:19
Previous
了解 OAuth 2.0 和 OpenID Connect
Next
OWASP API 安全 Top 10
Built with