Skip to main content
4nton Hugo Site
About Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Selfhosted SSO med Authelia

Selfhosted SSO med Authelia

Alternativ til Authentik — samme mål (ét login + 2FA for Forgejo, Jellyfin, n8n, Kanboard, Shaarli, WebDAV), men med et markant lettere setup.

Hvorfor Authelia i stedet for Authentik

  • Én enkelt binær/container, ingen database eller cache-container nødvendig til et setup i denne størrelse.
  • Mindre footprint, hurtigere opstart, mindre at holde opdateret.
  • Trade-off: mindre poleret UI, og — vigtigst — en anden integrationsmodel, se nedenfor.

Footprint

Komponent Rolle
authelia Enkelt binary: portal, 2FA, forward-auth endpoint, (valgfrit) OIDC-provider
users_database.yml Lokal filbaseret brugerdatabase (bcrypt-hashed passwords)
SQLite (indbygget) Sessions og 2FA-registreringer — ingen separat DB-container

Typisk idle-forbrug er under 100 MB RAM og minimal CPU — markant lettere end Authentiks 4 containere (server, worker, Postgres, Redis). Redis/Postgres er kun relevant, hvis man kører flere Authelia-instanser i HA, hvilket ikke er nødvendigt her.

Vigtig forskel fra Authentik-opsætningen

Authelia virker udelukkende som forward-auth: reverse proxyen skal selv kalde Authelia som en sub-request (auth_request i nginx, ForwardAuth-middleware i Traefik, forward_auth i Caddy) og derefter selv proxye videre til appen. Authelia har, i modsætning til Authentik, ingen indbygget “outpost”, der kan agere som en selvstændig fuld reverse proxy for en enkelt app.

Konsekvens for dette setup: Synology DSM’s reverse proxy-GUI understøtter ikke auth_request. Authelia kræver derfor et ekstra reverse-proxy-lag (fx Traefik eller Caddy) foran de apps, der skal forward-auth-beskyttes — DSM kan ikke løse det alene, i modsætning til Authentik-sporet hvor DSM kan pege direkte pĂĄ en Authentik-outpost-container.

Arkitektur

graph LR
  Internet -->|HTTPS 443| DSM[Synology Reverse Proxy]

  DSM -->|forgejo.4nton.dk| Forgejo[Forgejo]
  DSM -->|jellyfin.4nton.dk| Jellyfin[Jellyfin]

  DSM -->|shaarli/kanboard/dav .4nton.dk| Traefik[Traefik - forward-auth lag]

  Traefik -.auth check.-> Authelia[(Authelia)]
  Traefik -->|efter login| Shaarli
  Traefik -->|efter login| Kanboard
  Traefik -->|efter login| WebDAV

  Forgejo -.OIDC.-> Authelia
  Jellyfin -.OIDC.-> Authelia

Login-flow, native OIDC-app (fx Forgejo)

sequenceDiagram
  participant Bruger
  participant Forgejo
  participant Authelia

  Bruger->>Forgejo: Ă…bner forgejo.4nton.dk
  Forgejo->>Bruger: Redirect til Authelia (authorize)
  Bruger->>Authelia: Login + 2FA
  Authelia->>Bruger: Redirect med authorization code
  Bruger->>Forgejo: Code
  Forgejo->>Authelia: Exchange code for token
  Authelia->>Forgejo: ID token + access token
  Forgejo->>Bruger: Logget ind

Login-flow, app uden SSO-support (fx Shaarli, via Traefik forward-auth)

sequenceDiagram
  participant Bruger
  participant Traefik
  participant Authelia
  participant Shaarli

  Bruger->>Traefik: GET shaarli.4nton.dk
  Traefik->>Authelia: Sub-request: er bruger godkendt?
  alt Ingen session
    Authelia->>Traefik: 401
    Traefik->>Bruger: Redirect til Authelia login
    Bruger->>Authelia: Login + 2FA
    Authelia->>Bruger: Session cookie sat
    Bruger->>Traefik: Gentager original request
    Traefik->>Authelia: Sub-request igen
  end
  Authelia->>Traefik: 200 OK + brugerheaders
  Traefik->>Shaarli: Forward original request
  Shaarli->>Bruger: Side vises

Setup

1. Docker Compose

services:
  authelia:
    image: ghcr.io/authelia/authelia:4.38  # tjek nyeste stabile tag pĂĄ GitHub releases
    restart: unless-stopped
    volumes:
      - ./config:/config
    environment:
      TZ: Europe/Copenhagen
    ports:
      - "9091:9091"

  traefik:
    image: docker.io/library/traefik:v3.1
    restart: unless-stopped
    command:
      - "--providers.docker=true"
      - "--entrypoints.web.address=:80"
    ports:
      - "8080:80"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro

./config/configuration.yml (uddrag — minimum for et fil-baseret setup):

authentication_backend:
  file:
    path: /config/users_database.yml

access_control:
  default_policy: deny
  rules:
    - domain: "*.4nton.dk"
      policy: two_factor

session:
  secret: ${SESSION_SECRET}
  cookies:
    - domain: 4nton.dk
      authelia_url: https://auth.4nton.dk

storage:
  local:
    path: /config/db.sqlite3

notifier:
  smtp:
    address: smtp://<din-mailserver>:587
    username: <bruger>
    password: ${SMTP_PASSWORD}
    sender: authelia@4nton.dk

Brugere og bcrypt-hashede passwords genereres med:

docker run --rm ghcr.io/authelia/authelia:4.38 authelia crypto hash generate argon2

…og indsættes manuelt i users_database.yml.

2. Native OIDC-apps (Forgejo, Jellyfin)

Tilføj under identity_providers.oidc i configuration.yml:

identity_providers:
  oidc:
    clients:
      - client_id: forgejo
        client_name: Forgejo
        redirect_uris:
          - https://forgejo.4nton.dk/user/oauth2/authentik/callback
        scopes: ["openid", "profile", "email"]

Indsæt derefter client ID/secret i appens egen OIDC-konfiguration, ligesom beskrevet i Authentik-guiden.

3. Apps uden SSO-support (Shaarli, Kanboard, WebDAV) — via Traefik

Flyt disse apps til at køre bag Traefik i stedet for direkte bag DSM’s reverse proxy, med labels som:

labels:
  - "traefik.http.middlewares.authelia.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.4nton.dk"
  - "traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true"
  - "traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=Remote-User,Remote-Groups,Remote-Name,Remote-Email"
  - "traefik.http.routers.shaarli.rule=Host(`shaarli.4nton.dk`)"
  - "traefik.http.routers.shaarli.middlewares=authelia@docker"

Peg til sidst DSM’s reverse proxy for disse subdomæner pĂĄ Traefiks port, i stedet for direkte pĂĄ apps’ene.

Checkliste

  • configuration.yml + .env med unikke secrets, ikke committed til git
  • Pin Authelia- og Traefik-versionen (ikke :latest)
  • access_control sat til two_factor som default policy
  • Native OIDC konfigureret for Forgejo, Jellyfin
  • Traefik sat op som mellemlag for Shaarli, Kanboard, WebDAV
  • DSM reverse proxy opdateret til at pege pĂĄ Traefik i stedet for direkte pĂĄ apps
  • SMTP-notifier testet (bruges til password-reset/lockout-mails)