OAuth 2.1
ให้แอปอื่นรับผู้ใช้เข้าสู่ระบบด้วยบัญชี Bot-Hosting ได้ เหมือน Sign in with Discord สร้างบน OAuth 2.1 และ PKCE ไคลเอนต์ OAuth มาตรฐานทุกตัวจึงใช้งานได้
ใช้ API key เพื่อควบคุมบัญชีของคุณเอง ใช้ OAuth เมื่อสร้างแอปที่ทำงานกับบัญชีของคนอื่น เพื่อให้พวกเขาเข้าสู่ระบบและให้ความยินยอมแทนการวางคีย์ ผู้ช่วย AI อย่าง ChatGPT เชื่อมต่อผ่านขั้นตอนนี้เช่นกัน
ขั้นตอนการทำงาน
- 01 สร้างแอป ลงทะเบียนชื่อและ redirect URI ในการตั้งค่านักพัฒนา คุณจะได้ client_id สาธารณะ โดยไม่มี secret
- 02 ส่งผู้ใช้ไปอนุญาต เปลี่ยนเส้นทางไปที่ /oauth/authorize พร้อม PKCE ผู้ใช้เข้าสู่ระบบและอนุมัติขอบเขตสิทธิ์
- 03 แลก code เป็น Token ผู้ใช้กลับมาพร้อม code ให้ POST ไปที่ token endpoint เพื่อรับ access token
- 04 เรียก API ในนามผู้ใช้ ส่ง Token เป็น Bearer ไปที่ /api/v1 และรีเฟรชเบื้องหลัง
Endpoint
| Endpoint | วัตถุประสงค์ |
|---|---|
| GET /oauth/authorize | หน้าจอขอความยินยอมจากผู้ใช้ เปิดในเบราว์เซอร์ |
| POST /api/oauth/token | แลก code เป็น Token หรือรีเฟรช Token |
| POST /api/oauth/register | Dynamic Client Registration (RFC 7591) ไม่บังคับ |
| GET /.well-known/oauth-authorization-server | เมทาดาทาสำหรับ Discovery |
| GET /.well-known/oauth-protected-resource | เมทาดาทาของทรัพยากร ใช้โดยไคลเอนต์ MCP |
อายุของ Token
Authorization code 10 นาที ใช้ได้ครั้งเดียว ผูกกับ PKCE
Access token 7 วัน Bearer สำหรับการเรียก /api/v1
Refresh token 30 วัน เปลี่ยนใหม่ทุกครั้งที่ใช้
การรีเฟรช
ทุกครั้งที่รีเฟรชจะได้ Refresh token ใหม่และเพิกถอนอันเก่า ให้เขียนทับค่าที่เก็บไว้เสมอ หากการรีเฟรชคืน invalid_grant ให้ส่งผู้ใช้กลับไปเริ่มที่ขั้นตอนที่ 1
ความปลอดภัย
- เก็บ Token ฝั่งเซิร์ฟเวอร์ ผูกกับผู้ใช้ของคุณ อย่าส่งไปยังเบราว์เซอร์หรือรีโพซิทอรีสาธารณะ
- Token จะถูกเพิกถอนทันทีที่ผู้ใช้ตัดการเชื่อมต่อแอปของคุณ
- ใช้ redirect URI แบบ https ใน Production ส่วน http ใช้ได้สำหรับการทดสอบในเครื่อง
- Token ของ OAuth ไม่ให้สิทธิ์ผู้ดูแลระบบเลย ไม่ว่าจะอนุมัติขอบเขตสิทธิ์ใด