為什麼需要 Key/Secret?
Web API 公開暴露在公網,若無身份憑證,任意第三方可冒充合法調用方盜用資源、竊取數據、發起惡意攻擊。Key/Secret 機制解決「你是誰」與「證明是你」的雙重問題。
生成原理核心要素
- App Key(公鑰標識):全局唯一、可公開傳輸,通常採用 UUID v4、Base62 編碼長整數、或帶前綴的隨機字符串(如
ak_live_xxx),便於日誌追蹤、速率限制、配額管理。
- App Secret(私鑰):高熵隨機字符串(≥ 128 bit),僅在創建時顯示一次,後續僅存儲鹽值哈希(如 Argon2、PBKDF2、bcrypt),不可逆恢復。
- 綁定元數據:創建時記錄擁有者、權限範圍、IP 白名單、回調域名、過期時間等。
典型簽名驗證流程
- 客戶端構建請求參數(含 timestamp、nonce、app_key、業務參數)。
- 按鍵名排序拼接,使用 Secret 計算 HMAC-SHA256 簽名。
- 將簽名放入 Header 或參數發送。
- 服務端查詢 App Key 獲取 Secret(解密或驗證哈希),按相同算法計算預期簽名,比對防篡改;同時校驗 timestamp 有效期、nonce 防重放。
安全加固建議
- Secret 泄露後支持撤銷、輪換、版本管理。
- 關鍵操作強制雙因子確認(如短信/郵件驗證碼)。
- 審計日誌記錄所有 Key 變更與異常調用。
- 避免在 URL、前端代碼、移動端硬編碼中暴露 Secret。
簡言之:Key 是「身份證號」,Secret 是「私有印章」,結合簽名算法實現無狀態、防篡改、防重放的 API 認證授權體系。