簽署的 OG 圖片網址
簽署的 OG 圖片網址(signed OG image URL)是指其參數以 HMAC-SHA256 簽章保護的網址,因此只有您(以及持有您密鑰的程式碼)才能請求會計入每月配額的渲染。FastOG 會對內容進行簽署——相同的參數始終產生相同且已快取的網址——這既能保護您的配額,也能讓快取具有確定性。
為什麼要簽署 OG 圖片 URL
一個能從未經驗證的 URL 渲染任意文字的 OG 圖片端點,等於是一個任何人都能存取的免費渲染農場。在訂閱制的服務中,這代表任何人都可能耗盡你的額度。用只有你的後端知道的密鑰簽署每個 URL,可以在第一次(未快取)請求時就阻擋所有未授權的請求,而合法的快取 URL 則能繼續正常運作。
內容簽章(content signing)的運作方式
- 您先建構標準化的查詢字串:所有參數(簽章除外)皆依序排序,並以 RFC-3986 編碼。
- 接著計算
HMAC_SHA256(secret, "GET/api/v1/og\n" + canonical)。 - 最後將簽章附加為
s參數。
此訊息不包含時間戳記,因此 URL 是穩定的:相同的參數 → 相同的 URL → 相同的快取項目。
canonical = "key=sk_...&template=default&title=Hello"
signature = HMAC-SHA256(secret, "GET/api/v1/og\n" + canonical)
url = ".../api/v1/og?key=...&template=default&title=Hello&s=" + signature
人們常搞錯的取捨
| 疑慮 | 實際情況 |
|---|---|
| 「簽署的 URL 會過期」 | 不會——它是內容簽署(content-signed),在你輪換密鑰之前都有效 |
| 「被竄改的 URL 會破壞快取」 | 不會——無效的 s 只會在快取未命中(miss)時回傳 401;已快取的圖片仍會正常回傳 |
| 「我需要時間戳記才能確保安全」 | 內容簽署就足以防止配額濫用;不需要時鐘 |
單一檔案 SDK
FastOG 針對每種語言提供單一簽署者檔案(零依賴),讓您永遠不必自行撰寫 HMAC。請從 SDK 頁面 下載,或直接從 CDN 取得 curl:
bash
curl -O https://fastog.com/sdk/node.js
常見問題
簽署的 URL 會過期嗎?
預設不會——它們會一直有效,直到你輪換 API 金鑰的 HMAC 密鑰。這是內容簽署(content-signed),而非時間簽署(time-signed)。
其他人可以透過猜測 URL 來消耗我的配額嗎?
不行。他們需要你的 HMAC 密鑰才能產生有效的簽章;沒有簽章時,未快取的渲染會回傳 401 invalid_signature。
我可以在瀏覽器中簽署 URL 嗎?
不行。請在伺服器端(或邊緣函式中)簽署,這樣密鑰永遠不會傳送到用戶端。渲染後的圖片 URL 可以安全地放在你的公開 <head> 中。