連接 LinkedIn 到自架伺服器時持續顯示未授權

描述問題/錯誤/問題

在我的自託管 n8n 中設定 LinkedIn post node 一直失敗,我已設定用戶端 ID、用戶端密鑰、新增回呼 URL、
停用了組織和舊版,
當我按下連線時,它正確地開啟了 LinkedIn 登入頁面,批准後我不斷收到此錯誤頁面「錯誤:未授權」,

錯誤訊息是什麼(如果有的話)?

請分享你的工作流程

(在畫布上選擇節點,使用鍵盤快捷鍵 CMD+C/CTRL+C 和 CMD+V/CTRL+V 來複製和貼上工作流程。)

分享最後一個節點返回的輸出

n8n 設定的相關資訊

  • n8n 版本: v2.29.5
  • 資料庫(預設:SQLite):postgres
  • n8n EXECUTIONS_PROCESS 設定(預設:own、main):
  • 透過以下方式執行 n8n(Docker、npm、n8n cloud、桌面應用程式):Truenas
  • 作業系統:Linux

@rick

你無法在 LinkedIn 上使用原始的 http://192.168... 位址。你有三個主要選項:

  • 反向代理(建議): 使用 Nginx Proxy Manager​、Traefik​ 或 Caddy(全部可作為 TrueNAS 上的應用程式使用)來將網域(例如 n8n.yourdomain.com)對應到你的本機 IP,並透過 Let’s Encrypt 產生免費的 SSL 憑證。
  • Cloudflare Tunnel: 如果你不想在路由器上開啟連接埠,可以使用 Cloudflare Tunnel(cloudflared)。這提供了一個安全的 https 網址,直接指向你的 TrueNAS 執行個體。
  • Tailscale Funnel: 如果你使用 Tailscale,可以使用「Funnel」透過安全的 HTTPS 位址公開你的本機 n8n 執行個體。

一旦你有了 HTTPS 位址,必須告訴 n8n 將其用於所有 OAuth 回呼。在你的 TrueNAS/Docker 環境變數中,新增或更新:

  • 鑰匙: WEBHOOK_URL
  • 值: https://n8n.yourdomain.com/(用你實際的安全網址替換)

變更此變數後,重新啟動你的 n8n 容器。

然後回到 LinkedIn 開發者入口網站

  1. 前往 Auth 標籤。
  2. OAuth 2.0 redirect URIs​ 下,移除 http://192.168... 位址。
  3. 新增你的新安全位址:https://n8n.yourdomain.com/rest/oauth2-credential/callback

最後

  1. 在 n8n 中開啟你的 LinkedIn 認證。
  2. 你會看到顯示的回呼 URL 已自動變更為 https
  3. 再次點擊 Connect。現在應該會成功完成握手。

@rick 你能否詳細展開更多細節?這樣可能會讓我們看到更多資訊,我懷疑問題可能在於你在 LinkedIn 端沒有啟用正確的「products」。

我提供了螢幕截圖,如你所見,我啟用了「在 LinkedIn 上分享」和「使用 OpenID Connect 透過 LinkedIn 登入」這兩個產品

啊好的,理解了,謝謝你的指南,我會試試為它設置 HTTPS

@rick 在截圖中,寫著「auth failed」(認證失敗)的地方有一些文字說「更多詳細資訊」,如果你點擊它應該會展開顯示更多詳細資訊

@rick

如果你選擇使用 Cloudflare Tunnel 路線,有一件事要補充,因為我也遇過這個問題,即使 HTTPS 已經正常運作,症狀看起來也跟這個「未授權」畫面完全一樣。

如果你把 Tunnel 放在 Cloudflare Access 後面(n8n 前面有登入畫面),Access 也會對 OAuth 回調路徑進行驗證,而 LinkedIn 的彈出視窗無法通過該驗證進行登入。所以 ?code= 永遠無法到達 n8n,你就會看到「錯誤:未授權,視窗現在可以關閉了。」

當你有了 https URL 後,有兩件事要檢查:

  1. 設定 WEBHOOK_URL(以及 N8N_EDITOR_BASE_URL,如果你使用它的話)為確切的公開 https 主機,然後重啟容器。重新導向必須在登入開始的相同主機上完成,否則工作階段和 OAuth 狀態不會相符,你就會得到未授權錯誤。原始的 192.168 IP 也會因此失敗,加上 LinkedIn 拒絕私有 http 位址。
  2. 如果你使用 Cloudflare Access,為 /rest/oauth2-credential/* 新增一個略過規則(政策設定為「所有人」,或使用服務 Token),這樣 Access 就不會攔截回調。如果只是使用沒有 Access 政策的純 Cloudflare Tunnel,你可以跳過這一步。

而你在 LinkedIn 的「授權」標籤中註冊的重新導向 URL 是完整路徑、完全相符且必須是 https:https://your-host/rest/oauth2-credential/callback。