ได้รับ 403/401 (สิทธิ์และสโคป)

การแก้ปัญหา 403 401 สิทธิ์ สโคป
อาการ
ฟลว์การอนุมัติสำเร็จแล้ว แต่เมื่อเรียก API กลับได้รับ 401 หรือ 403

ความแตกต่างระหว่าง 401 กับ 403

โค้ด ความหมาย
401 Unauthorizedข้อมูลรับรองไม่ถูกต้อง ใช้ไม่ได้ หรือหมดอายุ เป็นปัญหาของโทเคน
403 Forbiddenยืนยันตัวตนสำเร็จ แต่ไม่มีสิทธิ์สำหรับการดำเนินการนั้น เป็นปัญหาของสโคป บทบาท หรือสิทธิ์ความเป็นเจ้าของ

กรณีทั่วไปของ 401 และการรับมือ

  • โทเคนหมดอายุ(expired_token)→ ต่ออายุด้วย refresh token
  • โทเคนถูกเพิกถอนแล้ว(ผู้ใช้ยกเลิกการเชื่อมต่อ เป็นต้น)→ ฟลว์การอนุมัติซ้ำ
  • รูปแบบของ Authorization header ไม่ถูกต้องBearer (มีช่องว่างครึ่งความกว้าง)+ โทเคน
  • ใช้ environment ผิด(ใช้โทเคน production ใน staging)→ ตรวจสอบ environment

กรณีทั่วไปของ 403 และการรับมือ

  • สโคปไม่เพียงพอ(insufficient_scope)→ เพิ่มสโคปที่จำเป็นแล้วอนุมัติซ้ำ
  • ไม่มีสิทธิ์เข้าถึงร้านค้า → ตรวจสอบว่าไม่ได้เรียกทรัพยากรของร้านค้าอื่นนอกจากร้านที่แอปเชื่อมต่อไว้
  • สโคปประเภท User ยังไม่ผ่านการตรวจสอบ(app_not_approved)→ ยื่นขอตรวจสอบ (ดูบทความแยก)
  • สิทธิ์ของบทบาทไม่เพียงพอ → ผู้ใช้ที่เชื่อมต่อในตอนนั้นไม่มีบทบาทที่จำเป็น (เช่น เจ้าของ)
  • ข้อจำกัดของแพลน(plan_limit_exceeded)→ อัปเกรดแพลนของฝั่งร้านค้า

ขั้นตอนการแยกแยะสาเหตุ

  1. ตรวจสอบ error.code และ message ใน response
  2. บันทึก X-RR-Request-Id ลง log
  3. หากเป็น 401 ให้เรียก /v1/me เพื่อตรวจสอบว่าโทเคนเองยังใช้งานได้หรือไม่ (ถ้าสำเร็จแสดงว่าโทเคนโอเค หากขั้นต่อไปเป็น 403 แสดงว่าเป็นปัญหาสิทธิ์)
  4. หากเป็น 403 ให้ตรวจสอบ scope ที่อยู่ในโทเคนปัจจุบัน (/v1/oauth/introspect)
  5. หากไม่มีสโคปที่จำเป็นอยู่ ให้อนุมัติซ้ำ

วิธีตรวจสอบสโคป

curl -X POST https://receiptroller.io/oauth/introspect \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "token=$ACCESS_TOKEN&client_id=$CLIENT_ID&client_secret=$SECRET"

→ {
  "active": true,
  "scope": "store.read receipt.read",
  "client_id": "...",
  "exp": 1745740001
}

คู่มือที่เกี่ยวข้อง

วันที่เผยแพร่: 2569-04-27 วันที่อัปเดต: 2569-07-06
แท็ก
API (22) OAuth (15) Android (10) iOS (9) Webhook (8) api (7) oauth (5) getting-started (4) การลงทะเบียนแอป (4) การแก้ปัญหา (4)
บทความที่เกี่ยวข้อง