Files
wiki/Catalogue-Self-Hosted/apps/app-tinyauth.md
T
2026-06-09 18:40:21 +02:00

6.2 KiB


title: Tinyauth created: 2026-06-06 updated: 2026-06-06 type: app tags: [catalogue, reverse-proxy, authentication, authentification, oauth, go, auto-hebergement] confidence: medium contested: false sources: [https://selfh.st/apps/?tag=Reverse+Proxy, https://github.com/steveiliop52/tinyauth]

🚦 Tinyauth

Reverse proxy léger d'authentification écrit en Go. Idéal pour ajouter une couche d'authentification (OAuth, credentials) devant des apps self-hosted qui n'en ont pas nativement.

📋 Informations Générales

Champ Valeur
Site web tinyauth.app
GitHub steveiliop52/tinyauth
License MIT
Langage Go (frontend TypeScript/React)
Étoiles GitHub 7 455
Dernière MAJ 2026-05-31
Catégorie cat-reverse-proxy, Auth Proxy

📝 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 Initiale

  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

Alternative Différence Étoiles
app-authelia Plus complet (2FA, WebAuthn, ACL fines), plus lourd 25k
app-authentik Identity Provider complet, SSO, providers multiples 16k
app-oauth2-proxy Spécifiquement proxy OAuth, pas d'UI native 14k
app-cloudflared Tunnel Cloudflare + Access pour auth 14k

Propriétaires

Service Modèle Différence
Cloudflare Access SaaS (gratuit jusqu'à 50 users) Tinyauth en local vs Cloudflare-managed
Auth0 Freemium Identity Provider hébergé, pas reverse proxy
Okta Payant IdP 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

🔗 Pages Liées