URL ของ OG Image ที่มีการลงนาม (Signed OG Image URLs)
URL ของ OG image ที่มีการลงนามคือ URL ที่พารามิเตอร์ถูกป้องกันด้วยลายเซ็น HMAC-SHA256 เพื่อให้เฉพาะคุณ (และโค้ดที่ถือ secret ของคุณ) เท่านั้นที่สามารถขอเรนเดอร์ซึ่งนับรวมกับโควต้ารายเดือนของคุณได้ FastOG ลงนามที่ เนื้อหา — พารามิเตอร์ที่เหมือนกันจะสร้าง URL ที่เหมือนกันและถูกแคชเสมอ — ซึ่งทั้งปกป้องโควต้าของคุณและทำให้การแคชเป็นไปอย่างกำหนดได้
เหตุผลที่ต้องเซ็น URL ของ OG image
เอนด์พอยต์ OG image ที่แสดงข้อความใดก็ได้จาก URL ที่ไม่ต้องยืนยันตัวตนเปรียบเสมือนฟาร์มเรนเดอร์ฟรีที่ใครก็เรียกใช้ได้ บนบริการแบบสมัครสมาชิก นั่นหมายความว่าใครก็สามารถเบิร์นเครดิตของคุณได้ การเซ็น URL แต่ละรายการด้วยความลับ (secret) ที่เฉพาะแบ็กเอนด์ของคุณรู้ จะบล็อกคำขอที่ไม่ได้รับอนุญาตทั้งหมดตั้งแต่การเรียกครั้งแรก (ที่ยังไม่มีแคช) ในขณะที่ URL ที่ถูกต้องและมีแคชแล้วยังคงทำงานได้ตามปกติ
วิธีการทำงานของการลงนามเนื้อหา
- คุณสร้างสตริงคำสั่งแบบมาตรฐาน (canonical query string): ทุกพารามิเตอร์ (ยกเว้นลายเซ็น) จะถูกจัดเรียงและเข้ารหัสตาม RFC-3986
- คุณคำนวณ
HMAC_SHA256(secret, "GET/api/v1/og\n" + canonical) - คุณเพิ่มลายเซ็นเป็นพารามิเตอร์
s
ข้อความไม่มี timestamp ดังนั้น 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) ใช้ได้จนกว่าคุณจะหมุน secret |
| "URL ที่ถูกแก้จะทำลายแคช" | ไม่ใช่ — s ที่ไม่ถูกต้องจะได้รับ 401 เฉพาะเมื่อแคช พลาด เท่านั้น ส่วนรูปที่ถูกแคชไว้แล้วยังแสดงผลได้ตามปกติ |
| "ฉันต้องใช้ timestamp เพื่อความปลอดภัย" | การลงนามตามเนื้อหาเพียงพอที่จะป้องกันการใช้โควต้าเกินกำหนด ไม่จำเป็นต้องใช้ clock |
SDK ไฟล์เดียว
FastOG จัดส่งไฟล์ signer ไฟล์เดียวต่อภาษา (ไม่มี dependencies) เพื่อให้คุณไม่ต้องเขียน HMAC เอง ดาวน์โหลดจาก หน้า SDK หรือ curl โดยตรงจาก CDN:
curl -O https://fastog.com/sdk/node.js
คำถามที่พบบ่อย
URL ที่ลงนามแล้วจะหมดอายุหรือไม่?
โดยค่าเริ่มต้นแล้วไม่หมดอายุ — URL จะยังคงใช้งานได้จนกว่าคุณจะหมุนเวียน HMAC secret ของคีย์ API ใหม่ โดยเป็นการลงนามตามเนื้อหา (content-signed) ไม่ใช่ตามเวลา (time-signed)
คนอื่นจะใช้โควตาของฉันโดยการเดา URL ได้หรือไม่?
ไม่ได้ พวกเขาจำเป็นต้องมี HMAC secret ของคุณเพื่อสร้างลายเซ็นที่ถูกต้อง หากไม่มี ลักษณะการเรนเดอร์ที่ไม่ได้แคชจะส่งคืน 401 invalid_signature
ฉันต้องลงนาม URL ในเบราว์เซอร์หรือไม่?
ไม่ ควรลงนามฝั่งเซิร์ฟเวอร์ (หรือใน edge function) ซึ่ง secret จะไม่ถูกส่งไปยังไคลเอนต์ URL ของรูปภาพที่เรนเดอร์แล้วปลอดภัยที่จะใส่ใน <head> สาธารณะของคุณ