任何搬動資金的 API,都需要就每個請求證明兩件事:它來自你,且未被竄改或重放。HMAC 請求簽署兩者兼顧。以下說明它如何運作,以及 0trace 如何使用它。
什麼是 HMAC 簽署
HMAC(雜湊訊息鑑別碼)將你的密鑰與訊息結合,產生一段簽章。知道相同密鑰的伺服器會重新計算簽章並比對。若相符,則該請求真實且未經更動。0trace 使用 HMAC-SHA256。
簽署確切的位元組
請就送出時的原始請求主體逐位元組簽署。若你序列化 JSON 的方式與你簽署的內容不同(鍵順序被調換、多了空白),簽章就會不符。請把主體建構一次、簽署那段字串,並送出同一段字串。
加上 nonce
光有簽章擋不住重放——擷取到有效請求的人可以再送一次。一個 nonce(每個請求唯一的值)加上有限的時間窗,代表每個請求只被接受一次。0trace 施行基於 nonce 的重放時間窗。
把密鑰留在伺服器端
密鑰是簽章可信的根本,因此絕不該到達瀏覽器或行動客戶端。請在你的伺服器上簽署。若密鑰外洩,立即輪換。
0trace 的規範
- X-API-KEY:你的金鑰。
- X-API-SIGN:對確切請求主體的 HMAC-SHA256,十六進位。
- X-API-NONCE:每個請求唯一、且在重放時間窗內的值。
- 定價與出款皆於伺服器端計算,因此偽造的金額無法改變實際結算的結果。