跳到內容

OAuth 回呼修好還是 403,最後發現 API 開在錯的專案

整理日期:2026-07-07

一個內部分析平台新增 GSC 與 GA4 授權功能。使用者按下「連接 Google」後,第一個看到的是 404。

檢查前端按鈕後發現,它送到舊的 API 路徑。把路徑改成目前使用的 OAuth endpoint 後,Google 同意畫面可以開啟,但正式站與本機開發環境都還需要登記 callback URL。

原本以為 OAuth 用戶端就在目前部署平台的 Cloud 專案裡,實際查過才發現完全不是。


按鈕原本連到:

/api/oauth/google/start

後端實際路由則是:

/api/analytics/oauth/google/start

這一層修正後,404 消失,流程才真正進到 Google OAuth。

接下來要新增正式站與本機 callback:

https://example.com/api/analytics/oauth/google/callback
http://localhost:3000/api/analytics/oauth/google/callback

但目前平台的 Cloud 專案裡找不到程式實際使用的 client ID。檢查其他可用專案後,才確認這個 OAuth 用戶端屬於一個較早建立、目前仍被多個授權共用的專案。

這裡不能為了省時間直接新建另一組 OAuth 用戶端。

既有的 refresh token 會綁定原本的 client ID 與 client secret。換掉用戶端,原本已連線的網站通常要全部重新授權,影響範圍會比新增兩條 callback URI 大很多。

所以最後不是搬家,而是在原本 OAuth 用戶端所屬的專案補上兩條 redirect URI。

Google 授權完成後,平台在列出 GA4 帳戶與資源時回傳:

Google Analytics Admin API has not been used in project 123456789012
before or it is disabled.

這個錯誤訊息已經指出應該處理哪個專案。API 用量與配額跟著 OAuth 用戶端所屬專案計算,不一定跟目前部署程式的專案相同。

最後在同一個 OAuth 專案啟用:

  • Google Analytics Admin API:列出 GA4 帳戶與資源。
  • Google Analytics Data API:讀取 GA4 報表資料。

等待幾分鐘後,資源清單才正常出現。


這次連續出現三層不同問題:

  1. 前端按鈕使用舊 API 路徑,所以先回 404。
  2. 正確 OAuth 用戶端缺少新的 callback URI。
  3. GA4 API 沒有在 OAuth 用戶端所屬專案啟用,所以授權完成後仍回 403。

如果只盯著目前部署平台的 Cloud 專案,很容易一直找不到正確憑證,也可能誤建一組新的 OAuth 用戶端。


  1. 從程式實際使用的 client ID 反查 OAuth 用戶端。
  2. 確認該用戶端所屬的 Google Cloud 專案。
  3. 在原用戶端新增正式站與本機的 callback URI。
  4. 在同一專案啟用流程會用到的 Google API。
  5. 等待設定生效後重新授權,再測試帳戶與資源清單。

設定完成後,Google Cloud Console 的 API 頁面應從「啟用」變成「管理」。正式 OAuth 流程則要確認:

  • 同意畫面可以開啟。
  • Callback 回到正確站內路徑。
  • 授權結果有被平台接住。
  • GSC 與 GA4 資源清單都能正常讀取。

  • 不要因為目前專案找不到 client ID,就立刻建立新的 OAuth 用戶端。
  • 不要只補 redirect URI,卻沒有檢查 API 是否在同一專案啟用。
  • 不要只測 Google 同意畫面能不能開,callback 與資源讀取都要各自驗證。
  • 不要把 client ID、client secret、refresh token 或實際帳號寫進公開文件。

  • 程式目前使用的 client ID 前幾碼,以及它實際屬於哪個專案。
  • 正式站與本機 callback URI。
  • Google 回傳的完整 404、redirect mismatch 或 403 訊息。
  • 流程會呼叫 GSC、GA4 Admin 還是 GA4 Data API。
  • 如果更換 OAuth 用戶端,既有 refresh token 會影響哪些連線。

  • Google OAuth
  • GSC
  • GA4
  • Google Cloud
  • redirect URI
  • API 403