Skip to content

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:

  1. Doppeltes Login: Benutzer muessen sich erst im Portal und dann nochmal in n8n anmelden.
  2. 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 direkt

Komponenten

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-auth Cookie 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

KomponenteAenderung
n8nKeine Code-Aenderung, gleiche Version, gleiche Workflows
Nginx (Kundenserver)Neue location-Block fuer /sso
Docker-Compose (Kundenserver)Neuer Service n8n-sso-proxy
Prilog-Backend2 neue Endpoints unter /api/customer/n8n/
Portal FrontendN8nEditorTab ruft Token-Endpoint auf
ServerOrder SchemaOptional: n8nAdminEmail Spalte (Passwort bleibt im Filesystem)
Prilog-Admin ProvisioningNeuer Schritt: n8n + Auth-Proxy einrichten + Credentials speichern
RedisNeuer 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:

  1. Portal → Backend: Token erzeugen (~50ms)
  2. Auth-Proxy → Backend: Token validieren (~50ms)
  3. 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 (/health am 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:

  • .env mit chmod 600
  • Auth-Proxy laeuft im Docker-Netzwerk, nicht oeffentlich erreichbar
  • Keine Logs von Tokens oder Passwoertern

Alternativen die verworfen wurden

AlternativeWarum verworfen
n8n EnterpriseKosten ~500€/Monat pro Instanz
Disable n8n auth + Nginx auth_requestFunktioniert nicht: Cross-Domain-Cookies zwischen Portal und n8n nicht moeglich
Browser-PasswortmanagerFunktioniert, aber nicht echtes SSO. Erste Anmeldung bleibt manuell.
JavaScript-Injection in iframeCross-Origin-Restrictions verhindern Form-Auto-Fill
Magic-Link via EmailSchlechte 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):

  1. 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
  2. n8n API-Key generieren

    • In n8n Settings → API → Create API key
    • Key in Prilog-Admin speichern (ServerOrder.n8nApiKey)
  3. Auth-Proxy installieren

    • Docker-Compose-Update auf dem Kundenserver
    • .env mit N8N_ADMIN_EMAIL und N8N_ADMIN_PASSWORD befuellen
    • Service starten
  4. Nginx-Konfiguration erweitern

    • /sso location-Block fuer Auth-Proxy
  5. n8n Workflow-Templates deployen

    • POST /api/platform/v1/crisis/n8n/deploy-templates
    • 10 Standard-Krisenszenarien werden in n8n erstellt
  6. PRILOG_API_URL Variable in n8n setzen

    • https://api.prilog.chat
    • Ueber Docker-Env oder n8n Settings → Variables
  7. 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)