Files
claude_settings/plans/serialized-swimming-corbato.md
root 4277b10f55 Kanbanize Kartenerstellung dokumentiert: Arrival-Rule-Workaround, Board-Struktur
- Neuer Abschnitt "Karten erstellen (Aufgaben-Workflow)" mit Workflow A/B
- Bekannte Struktur erweitert: Workflows, Columns, Lanes für Board 1
- Pitfalls ergänzt: Arrival Rule, Parent-Link API, linkedCards read-only
- Settings und Plans aktualisiert

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 13:09:09 +01:00

5.4 KiB
Raw Permalink Blame History

Fix: OAuth Callback 403 Forbidden - WEBHOOK_URL und BASE_URL fehlen Prefix

Aktuelle Situation (Stand 2026-02-05)

Problem: OAuth-Callback zu flow.wvits.de/rest/oauth2-credential/callback schlägt mit 403 Forbidden fehl.

Screenshot zeigt: Callback-URL hat KEINEN Prefix → nginx blockt mit 403.

Root Cause Analyse

Gefundene Probleme:

  1. WEBHOOK_URL ohne Prefix (Hauptursache)

    # docker-compose.yml auf srv-docker02
    # WEBHOOK_URL=https://flow.wvits.de/77ba0b14e9ccd5521a0ec1867332378c/  # ← Auskommentiert!
    WEBHOOK_URL=https://flow.wvits.de/  # ← Aktiv, OHNE Prefix
    

    → OAuth-Callbacks gehen zu /rest/oauth2-credential/callback statt /PREFIX/rest/oauth2-credential/callback

  2. N8N_EDITOR_BASE_URL fehlt

    # N8N_EDITOR_BASE_URL=https://flow.wvits.de/77ba0b14e9ccd5521a0ec1867332378c/  # ← Auskommentiert
    

    → n8n nutzt Fallback (N8N_PROTOCOL + N8N_HOST), aber ohne Prefix → UI-Redirects, WebSocket-URLs, Asset-Loading könnten fehlschlagen

  3. ⚠️ nginx blockt alles ohne Prefix

    # /home/vinosadmin/n8n-reverse-proxy/nginx.conf auf srv-revproxy01
    location / { return 403; }  # ← Catch-All blockt
    

    → Nur Requests unter /77ba0b14e9ccd5521a0ec1867332378c/ werden weitergeleitet

  4. NPM Asset-Cache existiert (kein direktes Problem, aber Pitfall)

    • Cache-Key: $host$request_uri (ohne Client-IP)
    • Könnte 403-Responses cachen wenn externer Client Assets abruft
    • Aktuell: Cache leer, kein Problem
  5. Custom Certificates Mount-Error (kein Problem für OAuth)

    • /opt/custom-certificates Access denied
    • Betrifft nur HTTPS zu internen Services mit Custom CA
    • SMTP ist unverschlüsselt (SSL=false), kein Impact

Fix-Plan

Schritt 1: n8n docker-compose.yml korrigieren (srv-docker02)

SSH: ssh vinosadmin@srv-docker02

Datei: /home/vinosadmin/n8n/docker-compose.yml

Änderungen:

# 1. WEBHOOK_URL mit Prefix aktivieren (Zeile ~31)
# WEBHOOK_URL=https://flow.wvits.de/
WEBHOOK_URL=https://flow.wvits.de/77ba0b14e9ccd5521a0ec1867332378c/

# 2. N8N_EDITOR_BASE_URL mit Prefix hinzufügen (nach N8N_PROXY_HOPS)
N8N_EDITOR_BASE_URL=https://flow.wvits.de/77ba0b14e9ccd5521a0ec1867332378c/

Begründung:

  • WEBHOOK_URL: n8n nutzt diese für OAuth-Callback-URLs und Webhook-Generierung
  • N8N_EDITOR_BASE_URL: n8n nutzt diese für UI-Redirects, WebSocket-URLs, Asset-Pfade

Schritt 2: Container neu starten

cd /home/vinosadmin/n8n
docker compose down
docker compose up -d

Warum down statt restart?

  • Environment-Variablen werden nur beim up neu eingelesen
  • restart behält alte Env-Vars bei

Schritt 3: Verifikation

A) Container-Status prüfen:

docker compose ps
docker compose logs -f n8n-main | head -20

B) Environment-Variablen verifizieren:

docker exec n8n-n8n-main-1 env | grep -E "(WEBHOOK_URL|EDITOR_BASE_URL)"

Erwartete Ausgabe:

WEBHOOK_URL=https://flow.wvits.de/77ba0b14e9ccd5521a0ec1867332378c/
N8N_EDITOR_BASE_URL=https://flow.wvits.de/77ba0b14e9ccd5521a0ec1867332378c/

C) OAuth-Flow testen:

  1. n8n UI öffnen: https://flow.wvits.de/77ba0b14e9ccd5521a0ec1867332378c/
  2. Credentials → Microsoft Teams account 2 → "Connect my account"
  3. Microsoft-Login → Callback sollte zu /PREFIX/rest/oauth2-credential/callback gehen
  4. Erfolgreich: "Connected" - Credential ist authorisiert

D) Nginx-Logs prüfen (falls 403):

# Auf srv-revproxy01
ssh -J sshtest@10.10.254.201 vinosadmin@srv-revproxy01
docker logs --tail 50 n8n-reverse-proxy-nginx-1 2>&1 | grep oauth

Schritt 4 (Optional): NPM-Cache leeren

Falls nach dem Fix immer noch Probleme auftreten:

# Auf srv-revproxy01
ssh -J sshtest@10.10.254.201 vinosadmin@srv-revproxy01
docker exec npm sh -c 'rm -rf /var/lib/nginx/cache/public/*'
docker exec npm nginx -s reload

Geänderte Dateien

Datei Host Änderung
/home/vinosadmin/n8n/docker-compose.yml srv-docker02 WEBHOOK_URL + N8N_EDITOR_BASE_URL mit Prefix

Sicherheit & Impact

Was ändert sich:

  • OAuth-Callbacks gehen nun zu /PREFIX/rest/oauth2-credential/callback (mit Prefix)
  • nginx leitet alle /PREFIX/* Requests weiter (bestehende IP-Kontrolle bleibt)
  • Keine Änderungen an Firewall-Regeln oder nginx-Config

Keine Regression:

  • Bestehende Webhooks (UPS-Workflow) unverändert: /PREFIX/webhook/*
  • Interner Zugang via n8n.vinos.de weiterhin funktional
  • Externe Webhooks weiterhin erlaubt (allow all in Webhook-Block)

Troubleshooting

Falls OAuth immer noch 403:

A) Callback-URL prüfen:

# Browser DevTools → Network Tab → OAuth-Redirect URL ansehen
# Sollte sein: flow.wvits.de/77ba0b14e9ccd5521a0ec1867332378c/rest/oauth2-credential/callback
# NICHT:       flow.wvits.de/rest/oauth2-credential/callback

B) Container-Logs prüfen:

docker compose logs n8n-main | grep -i webhook

C) nginx-Logs prüfen:

# Auf srv-revproxy01
docker logs --tail 100 n8n-reverse-proxy-nginx-1 2>&1 | grep "403\|oauth"

Falls SPA nicht lädt (weiße Seite):

NPM-Cache leeren (gecachte 403-Responses):

# Auf srv-revproxy01
docker exec npm sh -c 'rm -rf /var/lib/nginx/cache/public/*'
docker exec npm nginx -s reload

Browser-Cache leeren:

  • Ctrl+Shift+R (Hard Reload)
  • Oder Incognito-Fenster