Een gemiddelde n8n productie-instance bevat credentials voor 10-30 externe services. Elk credential is een potentieel beveiligingsrisico. In deze gids leer je hoe n8n credentials beschermt, hoe je ze veilig beheert, en welke best practices je moet volgen om je automatisering waterdicht te houden.
Wat je leert:
- Hoe n8n credentials versleutelt en opslaat
- API Keys vs OAuth2: wanneer gebruik je wat?
- N8N_ENCRYPTION_KEY correct configureren
- Credentials veilig delen in teams
- Key rotation workflow bouwen
- Security audit checklist voor productie
Hoe n8n Credentials Opslaat
n8n slaat credentials niet als platte tekst op. Elke credential wordt versleuteld voordat het in de database terechtkomt.
Encryptie
- Algoritme: AES-256-GCM
- Sleutel: N8N_ENCRYPTION_KEY environment variable
- Opslag: Encrypted in database (SQLite of PostgreSQL)
- In transit: HTTPS verplicht voor Cloud, aanbevolen voor self-hosted
Redaction
- Frontend: Gevoelige velden worden nooit naar de browser gestuurd
- OAuth tokens: Alleen een boolean "token aanwezig" is zichtbaar
- Wachtwoorden: Vervangen door sterretjes (***) in de UI
- API responses: Credentials gefilterd uit execution logs
De N8N_ENCRYPTION_KEY
Dit is de belangrijkste secret van je hele n8n installatie. Zonder deze key zijn alle opgeslagen credentials onleesbaar. Raak je hem kwijt, dan moet je alle credentials opnieuw invoeren.
# Docker Compose voorbeeld
services:
n8n:
image: n8nio/n8n
environment:
# KRITIEK: Genereer een sterke, unieke key
- N8N_ENCRYPTION_KEY=jouw-supersterke-key-minimaal-32-karakters
# NOOIT:
# - Hard-coden in Dockerfiles
# - Committen naar Git
# - Dezelfde key voor dev en productie gebruiken
# WEL:
# - Bewaar in een secret manager (AWS Secrets, Vault)
# - Of in een .env file (niet in Git!)
# - Maak een backup op een veilige plek
# Sterke key genereren:
# openssl rand -hex 32
# Output: a1b2c3d4e5f6... (64 hex karakters)
Wat als je de encryption key verliest?
Alle credentials in de database worden onleesbaar. Er is geen recovery mogelijk. Je moet elke credential handmatig opnieuw invoeren. Maak daarom altijd een backup van je encryption key op een aparte, veilige locatie.
Authenticatie Methoden
n8n ondersteunt meerdere authenticatiemethoden. De juiste keuze hangt af van de service die je verbindt.
| Methode | Hoe het werkt | Veiligheid | Voorbeelden |
|---|---|---|---|
| API Key | Statische key in header of query parameter | Goed — mits je roteert | OpenAI, Anthropic, Sendgrid |
| OAuth2 | Token-based flow met scoped permissions | Beste optie | Google, GitHub, Slack, HubSpot |
| Basic Auth | Username + password in Base64 | Basis — altijd over HTTPS | Interne API's, legacy systemen |
| Header Auth | Custom header met token | Goed | Custom API's, Bearer tokens |
OAuth2 vs API Keys: De Afweging
OAuth2 (aanbevolen)
- n8n ziet je wachtwoord nooit
- Tokens zijn scoped (alleen benodigde permissions)
- Tokens verlopen automatisch (short-lived)
- Toegang eenvoudig intrekken bij de provider
Nadeel: meer setup (redirect URI, client ID/secret)
API Keys
- Simpele setup: kopieer en plak
- Geen browser-based flow nodig
- Werkt overal (ook in containers zonder browser)
- Makkelijk te scripten en automatiseren
Nadeel: statisch, breed bereik, handmatig roteren
Credentials Delen in Teams
In teamomgevingen moeten meerdere mensen dezelfde credentials gebruiken — zonder de daadwerkelijke keys te zien.
// n8n Credential Sharing (Cloud & Enterprise) // Scenario: Marketing team moet Mailchimp credential gebruiken // maar mag de API key niet zien. // 1. Admin maakt credential aan: // Settings → Credentials → Add → Mailchimp // Name: "Mailchimp - Marketing Team" // API Key: mc_xxxxxxxxxxxx // 2. Admin deelt met gebruikers/projecten: // Credential → Sharing → Add Users // → Selecteer teamleden // → Permission: "Can use" (NIET "Can manage") // 3. Teamleden zien: // - De credential naam in hun dropdown // - Kunnen het selecteren in Mailchimp nodes // - Zien NIET de daadwerkelijke API key // - Kunnen de credential NIET bewerken of exporteren // Resultaat: Veilig gedeeld zonder key exposure
Best Practices: De Security Checklist
Principle of Least Privilege
Geef elke credential alleen de minimaal benodigde permissions. Als je workflow alleen data leest, maak dan een read-only API key — geen admin key.
Dedicated API Keys voor n8n
Maak aparte API keys specifiek voor n8n. Hergebruik nooit keys van andere applicaties. Zo kun je n8n-toegang intrekken zonder andere tools te beïnvloeden.
Roteer Keys Elke 6-12 Maanden
Stel een herinnering in om API keys periodiek te vernieuwen. Dit beperkt de schade als een key ooit uitlekt.
Gebruik Environment Variables
Bewaar de N8N_ENCRYPTION_KEY en database wachtwoorden als environment variables. Nooit hard-coden in Docker Compose of config bestanden die in Git staan.
Audit Je Credentials Regelmatig
Check elke 3 maanden: welke credentials zijn nog in gebruik? Welke zijn ongebruikt? Verwijder wat je niet meer nodig hebt.
OAuth Revocation bij de Provider
Verwijder je een OAuth credential in n8n? Dan is de token bij de provider (Google, GitHub) nog actief. Ga naar de provider en trek de toegang daar ook in.
Credential Audit Workflow Bouwen
Automatiseer je security audits met een n8n workflow die je credentials monitort:
// Maandelijkse Credential Audit Workflow
Schedule Trigger (1e van elke maand, 09:00)
↓
HTTP Request → n8n Internal API
GET /api/v1/credentials
Headers: { "X-N8N-API-KEY": "{{ $env.N8N_API_KEY }}" }
↓
Code Node (analyseer credentials)
const creds = items;
const report = {
total: creds.length,
byType: {},
unused: [], // Credentials niet gekoppeld aan actieve workflows
oldOAuth: [] // OAuth tokens ouder dan 90 dagen
};
creds.forEach(c => {
const type = c.json.type;
report.byType[type] = (report.byType[type] || 0) + 1;
if (!c.json.nodesAccess?.length) {
report.unused.push(c.json.name);
}
});
return { json: report };
↓
Slack Node (#security-audit)
"🔐 *Maandelijkse Credential Audit*
Totaal: {{ $json.total }} credentials
Ongebruikt: {{ $json.unused.length }}
{{ $json.unused.length > 0
? '⚠️ Overweeg om ongebruikte credentials te verwijderen:\n' +
$json.unused.join('\n')
: '✅ Geen ongebruikte credentials' }}"
Relatie met Environment Variables en Secrets
n8n heeft twee manieren om gevoelige data op te slaan:
| Feature | Credentials Manager | Environment Variables |
|---|---|---|
| Wat het opslaat | API keys, OAuth tokens, wachtwoorden | Configuratiewaarden, secrets |
| Beheer via | n8n UI (Settings → Credentials) | Server configuratie (.env, Docker) |
| Toegang in workflows | Automatisch via node configuratie | Via {{ $env.VARIABLE_NAME }} |
| Delen met team | Ja, via credential sharing | Nee — server-level configuratie |
Lees meer over environment variables in onze Workflow Variables & Secrets gids — dit is een van onze best gelezen artikelen met meer dan 19.000 impressies per maand.
Veelgemaakte Fouten
API keys hard-coden in Code nodes
Nooit const apiKey = "sk-xxx" in een Code node zetten. Gebruik altijd de credentials manager of environment variables. Hard-coded keys belanden in execution logs en workflow exports.
Dezelfde API key voor dev en productie
Maak aparte keys per omgeving. Een fout in een development workflow mag nooit productiedata raken.
Admin keys gebruiken als read-only volstaat
Geef je workflow alleen de permissions die het nodig heeft. Een read-only key kan nooit per ongeluk data wissen.
Vergeten OAuth bij de provider in te trekken
Als je een OAuth credential in n8n verwijdert, is de autorisatie bij de provider (Google, GitHub) nog actief. Trek het daar ook in.
Conclusie
Credential management is geen bijzaak — het is de fundering van veilige automatisering. n8n biedt sterke encryptie en redaction uit de doos, maar de verantwoordelijkheid voor key rotation, least privilege, en audit ligt bij jou.
Security Checklist
- 1. N8N_ENCRYPTION_KEY veilig opgeslagen en gebackupt
- 2. Alle credentials via de credentials manager (niet hard-coded)
- 3. OAuth waar mogelijk, API keys waar nodig
- 4. Least privilege: alleen benodigde permissions
- 5. Dedicated keys per applicatie en per omgeving
- 6. Key rotation elke 6-12 maanden
- 7. Maandelijkse credential audit