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

174 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)
```yaml
# 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**
```yaml
# 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**
```nginx
# /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:**
```yaml
# 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
```bash
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:**
```bash
docker compose ps
docker compose logs -f n8n-main | head -20
```
**B) Environment-Variablen verifizieren:**
```bash
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):**
```bash
# 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:
```bash
# 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:**
```bash
# 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:**
```bash
docker compose logs n8n-main | grep -i webhook
```
**C) nginx-Logs prüfen:**
```bash
# 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):
```bash
# 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