SSD Nodes Learn Hosting plans →
Gidsen Matt ConnorDoor Matt Connor · Bijgewerkt 2026-08-28

Authentik SSO installeren met Docker Compose

Installeer Authentik als SSO-oplossing via Docker Compose. Leer hoe u de akadmin bootstrap uitvoert, de benodigde env-waarden configureert en forward auth via Traefik instelt.

Eén login voor elke applicatie die u host

Authentik is een self-hosted SSO-server (single sign-on): uw gebruikers loggen één keer in en elke applicatie erachter accepteert die sessie in plaats van om een eigen wachtwoord te vragen. De installatie verloopt via een officieel Docker Compose-bestand en twee gegenereerde secrets. Het onderdeel dat echt aandacht vereist komt daarna: een reverse proxy naar de server laten wijzen en een bestaande applicatie achter forward auth plaatsen.

Authentik wordt geleverd als drie services in dat Compose-bestand: een PostgreSQL-database, een server-proces en een worker-proces. De servercontainer draait ook de embedded outpost; dit is de component die voor elke beveiligde applicatie beantwoordt of een verzoek is aangemeld. Versie 2026.5 is de huidige release per juli 2026, en het project vereist een host met ten minste 2 CPU-cores en 2 GB RAM. Beschouw dit als het absolute minimum. PostgreSQL en de worker verbruiken geheugen zodra de server een dag actief is.

Wat u nodig heeft voordat u begint

U heeft Docker Engine met de Compose v2-plugin nodig. Controleer dit met docker compose version. Als dit een foutmelding geeft in plaats van een versienummer, installeer dan de plugin voordat u verdergaat; de basis wordt behandeld in applicaties draaien met Docker Compose op een VPS. U heeft ook een DNS A-record nodig dat naar de server wijst, in de onderstaande voorbeelden auth.example.com, omdat Authentik de redirect-URL's opbouwt op basis van de hostnaam die de browser heeft gebruikt.

Draai de stack als een gewone gebruiker in de docker-groep in plaats van als root. Het lidmaatschap van deze groep staat gelijk aan root-toegang op de host. Geef dit lidmaatschap daarom aan slechts één account voor beheer, zoals beschreven in accounts met minimale rechten op een VPS.

Installatie met het officiële Compose-bestand

sudo install -d -o "$USER" -g "$USER" /opt/authentik
cd /opt/authentik
wget https://docs.goauthentik.io/compose.yml
echo "PG_PASS=$(openssl rand -base64 36 | tr -d '\n')" >> .env
echo "AUTHENTIK_SECRET_KEY=$(openssl rand -base64 60 | tr -d '\n')" >> .env
docker compose pull
docker compose up -d

docker compose ps hoort drie containers weer te geven, waarbij postgresql de status healthy rapporteert en server en worker de status running rapporteren. De eerste start voert de databasemigraties uit; geef het proces daarom een minuut de tijd voordat de webinterface reageert.

Beide gegenereerde waarden zijn om verschillende redenen van belang. PG_PASS is het PostgreSQL-wachtwoord en heeft een harde limiet van 99 tekens. AUTHENTIK_SECRET_KEY ondertekent sessies en tokens; het wijzigen hiervan zorgt er achteraf voor dat alle gebruikers worden uitgelogd en alle uitgegeven API-tokens ongeldig worden. Houd .env op modus 600 en bewaar een kopie op een veilige plek, omdat een database die wordt hersteld zonder de bijbehorende geheime sleutel een database is waar niemand op kan inloggen.

Het Compose-bestand leest beide waarden met de ${PG_PASS:?database password required}-vorm, wat betekent dat Compose weigert te starten wanneer het bestand ontbreekt. Het uitvoeren van docker compose up -d vanuit de verkeerde map resulteert in de melding required variable AUTHENTIK_SECRET_KEY is missing a value: secret key required en stopt het proces. Die melding duidt op een padprobleem, niet op een configuratiefout.

De relevante omgevingsvariabelen

Al het overige wordt in hetzelfde .env-bestand geplaatst. Authentik vertaalt een dubbele underscore naar een geneste configuratiesleutel, waardoor AUTHENTIK_EMAIL__HOST de waarde email.host instelt. Een enkele underscore wordt zonder waarschuwing genegeerd; dit is de meest voorkomende reden waarom een instelling geen effect lijkt te hebben.

  • AUTHENTIK_BOOTSTRAP_PASSWORD stelt bij de eerste start het wachtwoord in voor de ingebouwde akadmin-gebruiker, zodat u dit nooit in een openbaar webformulier hoeft in te voeren. AUTHENTIK_BOOTSTRAP_EMAIL en AUTHENTIK_BOOTSTRAP_TOKEN stellen op dezelfde wijze het e-mailadres en een API-token voor die gebruiker in.
  • COMPOSE_PORT_HTTP en COMPOSE_PORT_HTTPS wijzigen de gepubliceerde poorten van de standaardwaarden 9000 en 9443.
  • AUTHENTIK_EMAIL__HOST, AUTHENTIK_EMAIL__PORT, AUTHENTIK_EMAIL__USERNAME, AUTHENTIK_EMAIL__PASSWORD, AUTHENTIK_EMAIL__USE_TLS en AUTHENTIK_EMAIL__FROM configureren uitgaande e-mail. Zonder deze instellingen probeert Authentik localhost op poort 25 te benaderen, waardoor e-mails voor wachtwoordherstel in het logboek van de worker als verbindingsfout verschijnen.
  • AUTHENTIK_LOG_LEVEL=debug activeert de gedetailleerde logboekregistratie die u nodig heeft wanneer een inlogproces niet naar behoren werkt. Zet deze na afloop weer terug op info.
  • AUTHENTIK_ERROR_REPORTING__ENABLED staat standaard op false. Zet deze alleen op true als u akkoord gaat met het verzenden van crashrapporten naar de ontwikkelaars.

Dit zijn geheimen in een tekstbestand; behandel de map daarom zoals elke andere opslagplaats voor inloggegevens. Een wachtwoordbeheerder zoals een zelfgehoste Vaultwarden-instantie is een betere plek voor een reservekopie dan een notitie op uw laptop.

Eerste aanmelding en het beheerdersaccount

Open http://SERVER_IP:9000 in een browser. Authentik toont de initiële configuratieprocedure en vraagt u om een wachtwoord in te stellen voor de standaardgebruiker akadmin. Als u AUTHENTIK_BOOTSTRAP_PASSWORD al heeft ingesteld, is deze stap voltooid en wordt u direct doorgeleid naar de inlogpagina.

Maak onder Directory en vervolgens Users een normale beheerdersaccount voor uzelf aan, voeg deze toe aan de groep authentik Admins en meld u aan met dat account. Laat akadmin als break-glass-account bestaan en bewaar het lange wachtwoord offline. Dagelijks werken met een gedeeld ingebouwd account maakt het auditlog onbruikbaar, omdat in elke gebeurtenis akadmin staat en niet wie de actie heeft uitgevoerd. Dat geldt ook achter Authentik: iets als een zelfgehoste OneCLI-harnas waarmee elke persoon een eigen agent krijgt levert alleen een begrijpelijk spoor op als de identiteit die het ontvangt aan één persoon toebehoort en niet aan een login die het hele team deelt.

Authentik achter uw reverse proxy plaatsen

Het publiceren van poort 9000 naar het internet werkt, maar u wilt TLS (transport layer security) en een echte hostnaam. Als u de configuratie van Traefik als reverse proxy voor meerdere Compose-applicaties al gebruikt, voeg Authentik dan toe aan hetzelfde externe proxy-netwerk met een override-bestand. Maak docker-compose.override.yml aan naast compose.yml:

services:
  server:
    networks:
      - default
      - proxy
    labels:
      traefik.enable: "true"
      traefik.docker.network: proxy
      traefik.http.routers.authentik.rule: Host(`auth.example.com`)
      traefik.http.routers.authentik.entrypoints: websecure
      traefik.http.routers.authentik.tls.certresolver: le
      traefik.http.services.authentik.loadbalancer.server.port: "9000"

networks:
  proxy:
    external: true

Pas dit toe met docker compose up -d. Compose voegt de override automatisch samen, waardoor de server-service alle instellingen uit het officiële bestand behoudt en de labels erbij krijgt. Controleer dit met curl -I https://auth.example.com/if/user/, wat HTTP/2 200 zou moeten retourneren. Een 404 page not found van Traefik betekent dat de container zich niet op het proxy-netwerk bevindt en dat Traefik geen verkeer kan routeren naar een container die het niet kan bereiken.

Zodra de hostnaam werkt, bindt u de gepubliceerde poorten aan 127.0.0.1 in de override, zodat de enige toegangsweg via de proxy verloopt.

Beveilig één applicatie met forward auth

De proxyprovider van Authentik heeft drie modi. Als u de verkeerde kiest, kost dat al snel een uur. Proxy betekent dat de outpost zelf het verkeer doorstuurt naar de upstream-app. Forward auth (single application) betekent dat uw eigen reverse proxy het verkeer blijft doorsturen en Authentik alleen vraagt of het verzoek is aangemeld. Forward auth (domain level) beveiligt elke app onder één bovenliggend domein met één provider, maar u kunt dan geen afzonderlijke autorisatieregels per applicatie instellen. Als Traefik ervoor staat, kiest u forward auth (single application). Als u een concrete app zoekt om mee te oefenen, is bijvoorbeeld een zelfgehoste AFFiNE-werkruimte een goede eerste kandidaat. Dit type interne tool wilt u vanaf uw eigen apparaten kunnen bereiken, maar vanaf geen enkele andere locatie. Voor een teamtool is de meerwaarde nog duidelijker: plaats een zelfgehoste Chatwoot-supportdesk achter dezelfde provider. Iedereen die de inbox beheert, meldt zich dan één keer per dag aan in plaats van nog een wachtwoord te delen.

Open in de webinterface Applications en vervolgens Providers, maak een Proxy Provider aan, kies de modus forward auth single application en stel de external host in op https://app.example.com. Maak een Application aan die naar die provider verwijst. Open daarna Outposts, bewerk de authentik Embedded Outpost en verplaats de nieuwe applicatie naar de geselecteerde applicaties. De outpost reageert alleen op applicaties die aan de outpost zijn toegewezen; het overslaan van deze laatste stap is de reden waarom een correct geconfigureerde provider toch geen resultaat geeft.

Definieer de middleware eenmalig op de Authentik-container en verwijs hiernaar vanuit elke beveiligde applicatie:

      traefik.http.middlewares.authentik.forwardauth.address: http://server:9000/outpost.goauthentik.io/auth/traefik
      traefik.http.middlewares.authentik.forwardauth.trustForwardHeader: "true"
      traefik.http.middlewares.authentik.forwardauth.authResponseHeaders: X-authentik-username,X-authentik-groups,X-authentik-email,X-authentik-name,X-authentik-uid,X-authentik-jwt,X-authentik-meta-jwks,X-authentik-meta-outpost,X-authentik-meta-provider,X-authentik-meta-app,X-authentik-meta-version

authResponseHeaders is de lijst met headers die Traefik kopieert van het antwoord van Authentik naar het verzoek dat het naar de upstream-service stuurt. Laat u dit weg, dan is de applicatie nog steeds beveiligd, maar weet de applicatie niet wie de gebruiker is. Hierdoor blijven functies die X-authentik-username uitlezen voor automatische aanmelding uitgelogd.

De beveiligde applicatie zelf heeft twee routers nodig, niet één:

    labels:
      traefik.enable: "true"
      traefik.http.routers.myapp.rule: Host(`app.example.com`)
      traefik.http.routers.myapp.entrypoints: websecure
      traefik.http.routers.myapp.tls.certresolver: le
      traefik.http.routers.myapp.middlewares: authentik@docker
      traefik.http.routers.myapp-auth.rule: Host(`app.example.com`) && PathPrefix(`/outpost.goauthentik.io/`)
      traefik.http.routers.myapp-auth.entrypoints: websecure
      traefik.http.routers.myapp-auth.tls.certresolver: le
      traefik.http.routers.myapp-auth.priority: "15"
      traefik.http.routers.myapp-auth.service: authentik

De tweede router is het onderdeel dat vaak wordt vergeten. Na een aanmelding stuurt Authentik de browser terug naar een pad onder /outpost.goauthentik.io/ op de hostnaam van de applicatie, niet op auth.example.com. Zonder een router die dit padvoorvoegsel naar de Authentik-service stuurt, komt het verzoek aan bij uw applicatie, die een 404-foutmelding geeft, waardoor de aanmelding niet wordt voltooid. De hogere priority zorgt ervoor dat de specifieke padregel voorrang krijgt op de algemene Host()-regel op hetzelfde domein.

Test dit in een privévenster van uw browser. U hoort te worden doorverwezen naar auth.example.com, u aan te melden en vervolgens terug te keren naar de applicatie. docker compose logs -f server aan de kant van Authentik toont per poging een autorisatiegebeurtenis; dit geeft aan of het verzoek Authentik überhaupt heeft bereikt.

Fouten die u daadwerkelijk zult tegenkomen

Eindeloze redirect-loop tussen de applicatie en de inlogpagina. De externe host bij de provider komt niet overeen met wat de browser gebruikt, meestal http:// bij de provider tegenover https:// in de adresbalk. De sessie-cookie wordt dan ingesteld voor een andere oorsprong, waardoor elke retourzending eruitziet als een nieuw anoniem verzoek. Corrigeer de externe host en verwijder cookies voor beide domeinen voordat u opnieuw test.

404 bij /outpost.goauthentik.io/start. De outpost-router ontbreekt, of de prioriteit ervan is lager dan die van de catch-all-router voor die host.

De applicatie laadt zonder om een login te vragen. Het label middlewares verwijst naar middleware die niet bestaat. Traefik geeft hier geen waarschuwing over, dus een typefout in authentik@docker betekent simpelweg dat er geen middleware wordt uitgevoerd. Open het Traefik-dashboard en controleer of de router de middleware vermeldt.

403 vanuit Authentik na een succesvolle login. De gebruiker is geauthenticeerd maar niet geautoriseerd: de applicatie bevat een policy-binding of een groepvereiste waaraan deze gebruiker niet voldoet. Het Events-logboek in de beheerinterface vermeldt de policy die de toegang heeft geweigerd.

Wanneer Keycloak de betere keuze is

Keycloak is het oudere project, ondersteund door Red Hat, en is de sterkere keuze voor klassieke identiteitsbeheertaken in enterprise-omgevingen: uitgebreide SAML-federatie, het koppelen van aanmeldingen van meerdere externe identiteitsproviders tegelijk, en het exporteren en importeren van realms als een gedocumenteerd migratiepad. Commerciële ondersteuning is voor sommige organisaties op papier van belang. Het nadeel is dat Keycloak geen eigen proxy heeft. Om een applicatie te beveiligen die geen OIDC (OpenID Connect) ondersteunt, moet u dus software zoals oauth2-proxy ernaast draaien. De ingebouwde proxy-provider van Authentik is dat onderdeel, reeds geïntegreerd, wat de reden is dat de meeste zelf-hosters met een gevarieerd aanbod aan applicaties voor deze oplossing kiezen.

Backups en upgrades

Drie zaken maken een restore mogelijk: de PostgreSQL-database, de map ./data en .env.

cd /opt/authentik
docker compose exec -T postgresql pg_dump -U authentik authentik | gzip > authentik-$(date +%F).sql.gz

Sla die dump en .env samen op. De dump alleen is onvoldoende, omdat de geheime sleutel die sessie- en tokendata beveiligt in .env staat.

Upgrades zijn een wijziging van de tag. Stel AUTHENTIK_TAG in .env in op de gewenste release en voer daarna docker compose pull gevolgd door docker compose up -d uit. Lees eerst de release notes, omdat Authentik datumgebaseerde versies gebruikt en sommige releases migraties bevatten die vereisen dat u vanaf de voorgaande versie komt. Maak de database-dump vóór de pull, niet erna.

FAQ

Is Authentik gratis om zelf te hosten?

De open source-editie is gratis en dekt alles wat hierboven is genoemd: de proxy provider, forward auth, OIDC (OpenID Connect), SAML en de flows engine. Een betaalde enterprise-laag voegt ondersteuning en enkele enterprise-functies toe, maar niets in deze handleiding vereist een licentie.

Heb ik Traefik nodig om Authentik te gebruiken?

Nee. Forward auth werkt met nginx via auth_request en met Caddy via forward_auth. Het patroon is in elk geval hetzelfde: de reverse proxy vraagt Authentik om informatie over elk verzoek, en het pad-voorvoegsel /outpost.goauthentik.io/ op de beveiligde hostnaam moet worden gerouteerd naar Authentik in plaats van naar de applicatie.

Waarom blijft mijn beveiligde applicatie heen en weer springen tussen de inlogpagina en een foutmelding?

De externe host die is geconfigureerd in de proxy provider komt niet overeen met de URL die de browser gebruikt, meestal http tegenover https. De sessie-cookie wordt uitgegeven voor de ene origin en gelezen op de andere, waardoor Authentik bij elk verzoek een anonieme gebruiker ziet. Corrigeer de externe host en wis daarna de cookies voor beide hostnamen voordat u opnieuw test.

Hoeveel RAM heeft Authentik nodig?

Het gedocumenteerde minimum is 2 CPU-cores en 2 GB RAM per juli 2026, inclusief PostgreSQL, de server en de worker samen. Op een systeem met 2 GB RAM is de worker het eerste proces dat door de kernel wordt beëindigd bij geheugendruk; het symptoom hiervan is dat achtergrondtaken en uitgaande e-mail stoppen terwijl de inlogpagina nog wel werkt. Reserveer 4 GB als op dezelfde server ook de applicaties draaien die u beveiligt.