API key และ auth header
ที่มีประโยชน์ส่วนใหญ่ไม่ได้เปิดให้โลกทั้งใบเข้ามาใช้ได้ฟรีๆ บริษัทต้องรู้ว่า ใคร กำลังถามอยู่ เพื่อจะได้ติดตามการใช้งานและเรียกเก็บเงินคุณ พวกเขาให้ API key แก่คุณ — ข้อความลับยาวๆ ที่ใช้ระบุบัญชีของคุณ คุณต้องแนบมันไปกับทุกคำขอ โดยปกติจะอยู่ใน header ที่ชื่อว่า Authorization เหมือนบรรทัด Bearer sk_live_... ข้างบน
จง treat API key เหมือนรหัสผ่านทุกประการ เพราะมันคือรหัสผ่านนั่นแหละ ใครก็ตามที่มีมันสามารถส่งคำขอ ในนามของคุณ ได้ — และอาจทำให้บิลของคุณพุ่งสูงหรืออ่านข้อมูลของคุณได้ เรื่องนี้เชื่อมโยงตรงกับบทเรื่องความปลอดภัย และมีกฎข้อหนึ่งที่สำคัญที่สุด:
- ห้ามใส่ API key ในโค้ดที่ส่งไปที่เบราว์เซอร์เด็ดขาด ทุกอย่างใน ของคุณเป็นสาธารณะ — ผู้ใช้เปิด dev tools แล้วอ่านมันได้ ถ้าคุณสั่ง AI ว่า "เรียก API จากหน้าเว็บ" มันจะเอา key ของคุณไปวางตรงนั้นอย่างร่าเริงเลย หยุดมันซะ secret key ต้องอยู่บน เซิร์ฟเวอร์ เท่านั้น
- ห้าม key ลง เด็ดขาด ถึงแม้คุณจะลบมันออกทีหลัง มันจะอยู่ในประวัติตลอดไป และบอทสแกนหา key ใน public repo ภายในไม่กี่นาที
- เก็บ key ไว้ใน ไม่ใช่ในโค้ดโดยตรง — รูปแบบเดียวกับที่บทเรื่องความปลอดภัยพูดถึง
Key ต้องเดินทางมาจากที่ปลอดภัยเท่านั้น ไม่ใช่จากเบราว์เซอร์ ลองนึกภาพสองเส้นทาง — เส้นหนึ่งปลอดภัย อีกเส้นหนึ่งรั่วไหล:
SAFE ✓ LEAK ✗
┌──────────┐ key ┌──────────┐ ┌──────────┐ key ┌──────────┐
│ SERVER │ ─────▶ │ API │ │ BROWSER │ ────▶ │ API │
│ (your │ stays │ │ │ (anyone │ │ │
│ backend)│ hidden │ │ │ can │ │ │
└──────────┘ └──────────┘ │ read it)│ └──────────┘
key in env var └──────────┘
key in frontend = public
ถ้าคุณเคยเห็น key จริงๆ อยู่ใน diff, ในไฟล์ frontend, หรือในข้อความแชท ให้ถือว่ามันรั่วไหลไปแล้ว: หมุนเปลี่ยน key ทันที (สร้างอันใหม่ แล้วปิดใช้งานอันเก่า)