n8n SSO-Integration — Architektur und Konzept
Hintergrund
Prilog nutzt n8n als visuellen Workflow-Editor (siehe Automatisierung). Die n8n-Instanz laeuft auf jedem Kundenserver eigenstaendig und hat eine eigene Benutzerverwaltung. Das fuehrt zu zwei Problemen:
- Doppeltes Login: Benutzer muessen sich erst im Portal und dann nochmal in n8n anmelden.
- Keine Identitaets-Verbindung: Aktionen in n8n sind nicht mit dem Prilog-Benutzer verknuepft.
n8n Community Edition unterstuetzt kein natives SSO (SAML, OIDC, LDAP). Diese Funktionen sind nur in der Enterprise-Edition verfuegbar (kostenpflichtig). Wir loesen das Problem mit einer eigenen Auth-Proxy-Schicht, die zwischen Portal und n8n vermittelt.
Architektur
Portal (portal.prilog.chat)
│
│ 1. User klickt "n8n Workflows" Tab
▼
Portal-Backend (api.prilog.chat)
│
│ 2. POST /api/customer/n8n/sso-token
│ → erzeugt Einmal-Token, speichert in Redis (TTL 60s)
▼
Portal Frontend
│
│ 3. iframe URL: https://n8n.weser.prilog.team/sso?token=XXX
▼
Nginx (Kundenserver)
│
│ 4. /sso Pfad → Auth-Proxy (Port 5679)
▼
Auth-Proxy (Node.js, Port 5679)
│
│ 5. Validiert Token gegen Prilog-Backend
│ 6. Logged sich in n8n ein (lokales /rest/login)
│ 7. Captures n8n-auth Cookie
│ 8. Set-Cookie + 302 Redirect zu /
▼
Browser
│
│ 9. Folgt Redirect zu n8n.weser.prilog.team/
│ Cookie ist gesetzt
▼
n8n (Port 5678)
│
│ 10. Erkennt Cookie → User ist eingeloggt
│ Editor laedt direktKomponenten
1. Auth-Proxy Service
Was: Kleiner Express-Server (~100 Zeilen) auf dem Kundenserver, neben n8n im Docker.
Verantwortung:
- Empfaengt Requests an
/sso?token=XXX - Validiert das Token gegen Prilog-API
- Logged sich bei n8n ein (Email + Passwort aus Env-Vars)
- Setzt das
n8n-authCookie auf der Antwort - Redirect zur n8n-Hauptseite
Warum Node.js? n8n ist auch Node.js, gleiche Laufzeit, kein zusaetzlicher Container nur fuer Bash/Lua.
2. Backend-Endpoints
POST /api/customer/n8n/sso-token
- Authentifiziert via Portal-Session (CustomerAuth)
- Erzeugt Einmal-Token (Crypto-random)
- Speichert in Redis mit TTL 60s und Tenant-Bezug
- Gibt Token zurueck
POST /api/customer/n8n/validate-sso-token
- Body:
{ token } - Wird vom Auth-Proxy gerufen
- Prueft Token in Redis, loescht ihn (Single-Use)
- Gibt 200 + tenantId zurueck oder 401
3. Nginx-Konfiguration
location = /sso {
proxy_pass http://127.0.0.1:5679;
}
location / {
proxy_pass http://127.0.0.1:5678; # n8n
}4. n8n-Credentials Speicherung
Email + Passwort des n8n-Owner-Accounts in /opt/n8n/.env:
N8N_ADMIN_EMAIL=admin@prilog.team
N8N_ADMIN_PASSWORD=********Datei nur fuer root lesbar (chmod 600). Auth-Proxy laeuft als Non-Root-Container, bekommt die Variablen via Docker-Env.
5. Portal-Frontend
N8nEditorTab ruft vor dem iframe-Mount den Token-Endpoint auf, dann setzt es die iframe-URL mit dem Token.
Was es betrifft
| Komponente | Aenderung |
|---|---|
| n8n | Keine Code-Aenderung, gleiche Version, gleiche Workflows |
| Nginx (Kundenserver) | Neue location-Block fuer /sso |
| Docker-Compose (Kundenserver) | Neuer Service n8n-sso-proxy |
| Prilog-Backend | 2 neue Endpoints unter /api/customer/n8n/ |
| Portal Frontend | N8nEditorTab ruft Token-Endpoint auf |
| ServerOrder Schema | Optional: n8nAdminEmail Spalte (Passwort bleibt im Filesystem) |
| Prilog-Admin Provisioning | Neuer Schritt: n8n + Auth-Proxy einrichten + Credentials speichern |
| Redis | Neuer Key-Namespace n8n_sso_token:* |
Risiken und Nachteile
Sicherheit
Single-Account-Modell: Alle Portal-Benutzer teilen sich den gleichen n8n-Account. Das bedeutet:
- Keine n8n-internen Audit-Logs pro Person
- Wenn das n8n-Passwort kompromittiert wird, ist die ganze n8n-Instanz offen
- Keine differenzierten Berechtigungen innerhalb von n8n moeglich
Mitigation:
- Portal-Audit-Log: Wer hat wann den n8n-Tab geoeffnet (kann nachgereicht werden)
- n8n-Passwort regelmaessig rotieren (manuell)
- Langfristig: Migration auf n8n Enterprise mit echtem SSO
Verfuegbarkeit
Auth-Proxy als Single Point of Failure: Wenn der Proxy abstuerzt, funktioniert SSO nicht mehr.
Mitigation:
- Docker
restart: unless-stopped(automatischer Neustart) - n8n bleibt direkt erreichbar via Login-Formular (Fallback)
- Health-Check im Monitoring
Backend-Abhaengigkeit: Token-Validierung braucht eine Verbindung zum Prilog-Backend. Wenn api.prilog.chat nicht erreichbar ist, kein SSO.
Mitigation:
- n8n direktes Login bleibt moeglich
- Wir loggen die Backend-Erreichbarkeit
Performance
Pro iframe-Aufruf entstehen 3 zusaetzliche Requests:
- Portal → Backend: Token erzeugen (~50ms)
- Auth-Proxy → Backend: Token validieren (~50ms)
- Auth-Proxy → n8n: Login (~100ms)
Gesamt: ~200ms zusaetzliche Latenz beim Oeffnen des Editors. Akzeptabel.
Wartbarkeit
Mehr Komponenten: Mehr Sachen die kaputtgehen koennen. Mehr Logs zu pruefen. Mehr Konfiguration zu pflegen.
Mitigation:
- Klare Logs (Pino/Express-Logger)
- Health-Endpoints (
/healtham Auth-Proxy) - Doku in
docs/krisenmanagement/betrieb.md(n8n-Bereich erweitern)
Datenschutz
Der Auth-Proxy hat Zugriff auf:
- Portal-Session-Tokens (kurz, fuer Validierung)
- n8n-Admin-Credentials (dauerhaft, im Filesystem)
Mitigation:
.envmitchmod 600- Auth-Proxy laeuft im Docker-Netzwerk, nicht oeffentlich erreichbar
- Keine Logs von Tokens oder Passwoertern
Alternativen die verworfen wurden
| Alternative | Warum verworfen |
|---|---|
| n8n Enterprise | Kosten ~500€/Monat pro Instanz |
| Disable n8n auth + Nginx auth_request | Funktioniert nicht: Cross-Domain-Cookies zwischen Portal und n8n nicht moeglich |
| Browser-Passwortmanager | Funktioniert, aber nicht echtes SSO. Erste Anmeldung bleibt manuell. |
| JavaScript-Injection in iframe | Cross-Origin-Restrictions verhindern Form-Auto-Fill |
| Magic-Link via Email | Schlechte UX fuer "schnell mal Workflow anpassen" |
Provisioning-Auswirkungen
Bei der Einrichtung eines neuen Kundenservers (Prilog-Admin Onboarding) muss der Workflow erweitert werden:
Neue Schritte (nach Synapse + Web-Client + n8n-Installation):
n8n Owner-Account erstellen
- Per Browser auf
https://n8n.kunde.prilog.team/gehen - Owner-Account anlegen mit generiertem Passwort
- Email + Passwort im Prilog-Admin notieren
- Per Browser auf
n8n API-Key generieren
- In n8n Settings → API → Create API key
- Key in Prilog-Admin speichern (
ServerOrder.n8nApiKey)
Auth-Proxy installieren
- Docker-Compose-Update auf dem Kundenserver
.envmitN8N_ADMIN_EMAILundN8N_ADMIN_PASSWORDbefuellen- Service starten
Nginx-Konfiguration erweitern
/ssolocation-Block fuer Auth-Proxy
n8n Workflow-Templates deployen
POST /api/platform/v1/crisis/n8n/deploy-templates- 10 Standard-Krisenszenarien werden in n8n erstellt
PRILOG_API_URL Variable in n8n setzen
https://api.prilog.chat- Ueber Docker-Env oder n8n Settings → Variables
Test: Portal oeffnen → Ablaeufe → n8n Tab → SSO-Login funktioniert ohne Passwort-Eingabe
Ein Admin kann diesen ganzen Ablauf aktuell nicht ohne Hilfe machen — viele Schritte sind manuell. Ziel mittelfristig: Provisioning-Skript automatisieren.
Zukunfts-Optionen
- n8n Enterprise wenn Mehrbenutzer-Audit notwendig wird
- Custom n8n-Auth-Modul falls n8n in eine Open-Source-Variante davon Enterprise-Features uebernimmt
- Eigener Workflow-Editor als langfristige Alternative (sehr aufwaendig)