Retour aux outils
Dev ToolsIntermédiaireOpen sourceAuto-hébergeable

Tinyauth

**Reverse proxy léger d'authentification écrit en Go**. Idéal pour ajouter une couche d'authentifica

MAJ 2026-06-14
Tinyauth
Site officiel Code source★ 0

Tinyauth est un reverse proxy d'authentification minimaliste pensé pour protéger des applications self-hosted qui n'exposent pas de mécanisme d'auth robuste. Concrètement, on le place devant une app (Grafana, Uptime Kuma, Homer, etc.) et il intercepte les requêtes pour exiger une connexion.

Description

Tinyauth est un reverse proxy d'authentification minimaliste pensé pour protéger des applications self-hosted qui n'exposent pas de mécanisme d'auth robuste. Concrètement, on le place devant une app (Grafana, Uptime Kuma, Homer, etc.) et il intercepte les requêtes pour exiger une connexion.

Fonctionnalités clés :

  • ✅ Support OAuth2 / OIDC : Google, GitHub, GitLab, Generic OIDC
  • ✅ Username/password classique avec hash bcrypt
  • ✅ Multi-utilisateurs avec gestion des groupes
  • ✅ Cookie de session sécurisé (HttpOnly, SameSite, expiration)
  • ✅ Docker labels discovery : détecte automatiquement les apps à protéger
  • ✅ Léger : binaire Go unique, consommation RAM <50 Mo
  • ✅ Interface web pour la configuration
  • ✅ 2FA TOTP (optionnel)

Public cible : utilisateurs qui exposent leur homelab via Traefik/NPM et veulent protéger rapidement plusieurs services sans configurer Authentik/Authelia à chaque fois. Tinyauth fait le strict minimum mais le fait bien.

Différenciation : face à [[app-authelia]] (plus complet mais plus lourd) ou [[app-authentik]] (Identity Provider complet), Tinyauth joue la carte du simple reverse proxy auth qui se branche en 5 minutes. Idéal pour les petites installations.

Installation

Docker Compose (standalone)

# docker-compose.yml
services:
  tinyauth:
    image: ghcr.io/steveiliop52/tinyauth:latest
    container_name: tinyauth
    restart: unless-stopped
    environment:
      - SECRET=change-me-long-random-string
      - USERS_FILE=/app/users.json
      - TINYAUTH_DOMAIN=https://auth.example.com
    volumes:
      - ./users.json:/app/users.json:ro
      - tinyauth_data:/app/data
    networks:
      - proxy

  app-to-protect:
    image: my-app:latest
    networks:
      - proxy
    labels:
      - "tinyauth.enable=true"
      - "tinyauth.users=admin,user1"

networks:
  proxy:
    external: true

volumes:
  tinyauth_data:

Intégration avec Traefik

Tinyauth s'utilise typiquement comme middleware Traefik via les labels Docker :

services:
  grafana:
    image: grafana/grafana
    networks:
      - proxy
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.grafana.rule=Host(`grafana.example.com`)"
      - "traefik.http.routers.grafana.entrypoints=websecure"
      - "traefik.http.routers.grafana.tls.certresolver=letsencrypt"
      - "traefik.http.services.grafana.loadbalancer.server.port=3000"
      - "tinyauth.enable=true"               # protégé par tinyauth
      - "tinyauth.users=admin,user1"          # qui peut y accéder

Configuration

  1. Définir le secret : openssl rand -hex 32 → mettre dans SECRET
  2. Créer users.json avec mots de passe bcrypt :
    {
      "users": {
        "admin": "$2a$10$...",
        "user1": "$2a$10$..."
      }
    }
    
  3. Configurer l'OAuth (optionnel) : variables GOOGLE_OAUTH_CLIENT_ID, GITHUB_OAUTH_CLIENT_ID, etc.
  4. Pointer DNS auth.example.com vers le reverse proxy (Traefik/NPM)
  5. Ajouter les labels Docker sur les services à protéger
  6. Premier login : créer le compte admin, tester l'accès à une app protégée

Alternatives

Open Source

AlternativeDifférenceÉtoiles
[[app-authelia]]Plus complet (2FA, WebAuthn, ACL fines), plus lourd25k
[[app-authentik]]Identity Provider complet, SSO, providers multiples16k
[[app-oauth2-proxy]]Spécifiquement proxy OAuth, pas d'UI native14k
[[app-cloudflared]]Tunnel Cloudflare + Access pour auth14k

Propriétaires

ServiceModèleDifférence
Cloudflare AccessSaaS (gratuit jusqu'à 50 users)Tinyauth en local vs Cloudflare-managed
Auth0FreemiumIdentity Provider hébergé, pas reverse proxy
OktaPayantIdP enterprise, complexe pour homelab

Sécurité

  • ✅ Secret fort obligatoire (32+ bytes random)
  • ✅ Hash bcrypt pour les passwords (jamais en clair)
  • ✅ Cookies HttpOnly + Secure + SameSite=Strict
  • ✅ Rate limiting sur les endpoints d'auth
  • ⚠️ Single point of failure : si Tinyauth tombe, toutes les apps protégées sont inaccessibles
  • ⚠️ Pas d'audit log natif : brancher sur [[app-loki]] ou [[app-glances]] pour le monitoring
  • ⚠️ OIDC discovery : bien configurer TINYAUTH_DOMAIN pour les callbacks

Ressources