回傳 403/401(權限、權限範圍)

疑難排解 403 401 權限 權限範圍
事象
授權流程明明成功了,呼叫 API 卻回傳 401 或 403。

401 與 403 的差異

意義
401 Unauthorized驗證資訊不正確、無效、過期。權杖的問題
403 Forbidden驗證成功了,但沒有該操作的權限。權限範圍、角色、所有權的問題

401 的典型情況與因應

  • 權杖過期expired_token)→ 以刷新權杖更新
  • 權杖已撤銷(使用者解除串接等)→ 重新授權流程
  • Authorization 標頭的格式不正確Bearer (帶半形空格)+ 權杖
  • 環境搞錯(將正式權杖用於測試環境)→ 確認環境

403 的典型情況與因應

  • 權限範圍不足insufficient_scope)→ 追加必要的權限範圍後重新授權
  • 無店鋪存取權 → 確認是否未存取應用程式所串接店鋪以外的資源
  • User 系權限範圍未審查app_not_approved)→ 申請審查(參閱另一篇文章)
  • 角色權限不足 → 串接時的使用者未持有必要的角色(擁有者等)
  • 方案限制plan_limit_exceeded)→ 升級店鋪端的方案

釐清步驟

  1. 確認回應的 error.codemessage
  2. X-RR-Request-Id 記錄至日誌
  3. 若為 401 則呼叫 /v1/me 確認權杖本身的有效性(若成功則權杖 OK,若在後段變成 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
}

相關指南

發布日: 2026-04-27 更新日: 2026-07-06