三層 API 驗證
三層 API 驗證
概述
源自台灣金流串接經驗的 API 驗證機制,由三層防護組成,各自解決不同的安全問題。適用於兩個獨立部署的網站之間的 REST API 通訊。
步驟
第一層:API Key — 解決「你是誰」
- B 站產生 64 字元隨機金鑰
- 管理員複製 Key 貼到 A 站完成配對
- B 站只儲存 Key 的 Hash 值,不存明文
- 每次請求帶上 Key,B 站驗證通過才放行
第二層:SHA-256 簽章 — 解決「請求有沒有被竄改」
- A 站將三個值串接:
目標網站網址 | API Key | 當前時間戳 - 用 SHA-256 算出 Hash
- Hash 放在請求 Header 中送出
- B 站用同樣的材料重新計算,比對一致才通過
第三層:時間戳驗證 — 解決「重送攻擊」
- 請求帶上發送時的 Unix 時間戳
- B 站檢查時間戳與當前時間的差異
- 超過 5 分鐘即拒絕
- 攻擊者無法修改時間戳(會破壞簽章),也無法重算簽章(不知道 Key)
驗證順序
- 有沒有帶 API Key → 沒有就擋
- API Key 是否正確 → 不正確就擋
- 時間戳是否在 5 分鐘以內 → 過期就擋
- Hash 比對是否一致 → 不一致就擋
四關全過才放行。
適用場景
- 雙站 API 通訊
- Webhook 接收端驗證
- 第三方整合的回呼驗證
限制
- 依賴 HTTPS(簽章不加密)
- 依賴 NTP 時間同步
- 不含權限分級(RBAC)
- Key 管理靠人為紀律
關聯概念
- [[請求簽章]]
- [[API 金鑰管理]]
- [[重送攻擊防禦]]
- [[HMAC 驗證]]