OAuth 回呼修好還是 403,最後發現 API 開在錯的專案
整理日期:2026-07-07
一個內部分析平台新增 GSC 與 GA4 授權功能。使用者按下「連接 Google」後,第一個看到的是 404。
檢查前端按鈕後發現,它送到舊的 API 路徑。把路徑改成目前使用的 OAuth endpoint 後,Google 同意畫面可以開啟,但正式站與本機開發環境都還需要登記 callback URL。
原本以為 OAuth 用戶端就在目前部署平台的 Cloud 專案裡,實際查過才發現完全不是。
事情怎麼往下查
Section titled “事情怎麼往下查”先修正站內路徑
Section titled “先修正站內路徑”按鈕原本連到:
/api/oauth/google/start後端實際路由則是:
/api/analytics/oauth/google/start這一層修正後,404 消失,流程才真正進到 Google OAuth。
再找 OAuth 用戶端的正主
Section titled “再找 OAuth 用戶端的正主”接下來要新增正式站與本機 callback:
https://example.com/api/analytics/oauth/google/callbackhttp://localhost:3000/api/analytics/oauth/google/callback但目前平台的 Cloud 專案裡找不到程式實際使用的 client ID。檢查其他可用專案後,才確認這個 OAuth 用戶端屬於一個較早建立、目前仍被多個授權共用的專案。
這裡不能為了省時間直接新建另一組 OAuth 用戶端。
既有的 refresh token 會綁定原本的 client ID 與 client secret。換掉用戶端,原本已連線的網站通常要全部重新授權,影響範圍會比新增兩條 callback URI 大很多。
所以最後不是搬家,而是在原本 OAuth 用戶端所屬的專案補上兩條 redirect URI。
Callback 正常後,又遇到 GA4 403
Section titled “Callback 正常後,又遇到 GA4 403”Google 授權完成後,平台在列出 GA4 帳戶與資源時回傳:
Google Analytics Admin API has not been used in project 123456789012before or it is disabled.這個錯誤訊息已經指出應該處理哪個專案。API 用量與配額跟著 OAuth 用戶端所屬專案計算,不一定跟目前部署程式的專案相同。
最後在同一個 OAuth 專案啟用:
- Google Analytics Admin API:列出 GA4 帳戶與資源。
- Google Analytics Data API:讀取 GA4 報表資料。
等待幾分鐘後,資源清單才正常出現。
這次連續出現三層不同問題:
- 前端按鈕使用舊 API 路徑,所以先回 404。
- 正確 OAuth 用戶端缺少新的 callback URI。
- GA4 API 沒有在 OAuth 用戶端所屬專案啟用,所以授權完成後仍回 403。
如果只盯著目前部署平台的 Cloud 專案,很容易一直找不到正確憑證,也可能誤建一組新的 OAuth 用戶端。
- 從程式實際使用的 client ID 反查 OAuth 用戶端。
- 確認該用戶端所屬的 Google Cloud 專案。
- 在原用戶端新增正式站與本機的 callback URI。
- 在同一專案啟用流程會用到的 Google API。
- 等待設定生效後重新授權,再測試帳戶與資源清單。
設定完成後,Google Cloud Console 的 API 頁面應從「啟用」變成「管理」。正式 OAuth 流程則要確認:
- 同意畫面可以開啟。
- Callback 回到正確站內路徑。
- 授權結果有被平台接住。
- GSC 與 GA4 資源清單都能正常讀取。
不建議先做的事
Section titled “不建議先做的事”- 不要因為目前專案找不到 client ID,就立刻建立新的 OAuth 用戶端。
- 不要只補 redirect URI,卻沒有檢查 API 是否在同一專案啟用。
- 不要只測 Google 同意畫面能不能開,callback 與資源讀取都要各自驗證。
- 不要把 client ID、client secret、refresh token 或實際帳號寫進公開文件。
下次遇到可以先整理什麼
Section titled “下次遇到可以先整理什麼”- 程式目前使用的 client ID 前幾碼,以及它實際屬於哪個專案。
- 正式站與本機 callback URI。
- Google 回傳的完整 404、redirect mismatch 或 403 訊息。
- 流程會呼叫 GSC、GA4 Admin 還是 GA4 Data API。
- 如果更換 OAuth 用戶端,既有 refresh token 會影響哪些連線。
Google OAuthGSCGA4Google Cloudredirect URIAPI 403