Google Sheets n8n 認證持續失敗

嘿大家,我在用 n8n 連接 Google Sheets 時卡在一個令人沮喪的 OAuth 問題上,希望能有新的想法幫忙看看。

我的設定:

  • 透過 Docker 自架 n8n
  • 使用 ngrok 處理 webhook/OAuth 重導

發生的情況:
OAuth 流程進行到最後,我選擇帳號、授予權限,但沒有看到「連接成功」畫面,反而在最後收到 Unauthorized 錯誤。

我已經試過的方法:

  • 啟用了所有相關的 Google 範圍
  • 在 OAuth 品牌頁籤的授權網域中加入了我的 ngrok 網域
  • 重複進行流程約 10 次,結果都一樣

讓我困惑的地方:
這個相同的設定之前對其他整合都能正常運作。我這邊沒有刻意做任何改動,只是一個憑證憑空停止運作,現在我沒辦法讓任何新的 Google 連接授權成功。

有人特別在 ngrok + Docker + Google OAuth 這個組合上遇過這個問題嗎?有人知道發生了什麼改變或我可能遺漏了什麼嗎?

那個最後步驟中出現的「Unauthorized」幾乎總是 Google 拒絕 OAuth 重定向 URL,而不是範圍或權限問題。當 Docker + ngrok 同時使用時,最常見的原因是以下內容不匹配:

n8n 為認證資訊生成的回調 URL

你在 Google Cloud OAuth 用戶端中新增的授權重定向 URI

n8n 內部使用的 N8N_EDITOR_BASE_URL / WEBHOOK_URL 環境變數

這三者需要完全相符,相同的協議、相同的網域、相同的路徑,沒有尾部斜線的差異。即使只有一個字符不同,Google 也會讓你一直完成登入,然後在最後的重定向時拒絕你。

若要驗證,請在 n8n 中開啟 Google Sheets 認證資訊,查看它顯示的 OAuth 重定向 URL,複製該確切字串,並確保它在 Google Cloud 控制台的「授權重定向 URI」下逐字列出。

這看起來還不像是 Google Sheets 權限問題。看起來像是 OAuth 回呼身分識別問題。

線索是流程通過了帳戶選擇和同意,然後在最後的重定向時失敗。這通常是 n8n base URL / webhook URL / Google 授權重定向 URI 不匹配出現的地方。

我建議現在停止更改範圍,先驗證一件事:

n8n Google Sheets 認證中顯示的重定向 URL 是否與 Google Cloud 授權重定向 URI 完全逐字相符,包括協議、ngrok 網域、路徑和尾部斜槓?

不要公開發布用戶端密鑰或令牌。唯一可以公開比較的安全做法是隱蔽的回呼網域/路徑形狀。

嘿!這是經典的 ngrok + Docker OAuth 重定向不匹配問題。最常見的原因:

1. ngrok URL 在不同會話間改變
ngrok 免費版每次重啟都會產生新的 URL。如果你在設定 OAuth 用戶端後重啟了 ngrok,Google Cloud Console 中的重定向 URI 就不再匹配了。修正:更新 Google Cloud Console 中的「授權重定向 URI」為新的 ngrok URL:https:// <new-ngrok>.ngrok-free.app/rest/oauth2-credential/callback

2. WEBHOOK_URL 環境變數遺失或過期
在你的 Docker Compose 中需要:

N8N_EDITOR_BASE_URL=https://<your-ngrok-url>
WEBHOOK_URL=https://<your-ngrok-url>

沒有這些設定,n8n 會從 localhost 內部建構回調,這永遠不會符合 Google 的預期。

3. Google 應用處於測試模式
如果 OAuth 同意畫面處於測試模式,只有明確列出的測試使用者才能授權。確保你的帳戶在測試使用者清單中。

快速檢查清單:

  • Google Cloud Console 中的重定向 URI 是否確實符合 <ngrok-url>/rest/oauth2-credential/callback
  • WEBHOOK_URL 是否在你的 Docker 環境中設定?
  • 你的帳戶是否在 OAuth 測試使用者清單中?

「隨機停止運作」的模式幾乎總是指向 ngrok URL 輪換。告訴我你找到了什麼!

聽起來您嘗試登入的帳戶不在測試使用者群組中。請將其新增到該群組後重試。