Tinyauth
Tinyauth est un serveur d’authentification et d’autorisation particulièrement léger. Il est conçu pour fonctionner à la fois comme middleware d’authentification pour vos applications, avec support d’OAuth, LDAP et contrôles d’accès, et comme serveur d’authentification autonome. Il est compatible avec tous les proxies populaires tels que Traefik, Nginx et Caddy.

Fonctionnalités
Tinyauth propose les fonctionnalités suivantes :
- Déploiement ultra rapide via Docker/Podman
- Possibilité de créer des users locaux directement dans les variables d’environnement (donc pas besoin de gérer un fichier de config)
- Interfaçage avec des services d’authentification externe, comme du LDAP, du Oauth via Github, Google…
- De la double authentification TOTP
Installation
Le fichier docker-compose.yml :
services:
tinyauth:
image: ghcr.io/steveiliop56/tinyauth:latest
container_name: tinyauth
hostname: tinyauth
env_file: tinyauth.env
networks:
- nginx_proxy
restart: always
networks:
nginx_proxy:
external: trueLe fichier tinyauth.env associé :
SECRET=<clé_secrète>
APP_URL=https://tinyauth.mondomaine.fr
DISABLE_CONTINUE=true
APP_TITLE=JeremKy Auth
BACKGROUND_IMAGE=<url optionnelle>
USERS=<à remplir plus tard>Pour générer une clé secrète aléatoire, utilisez la commande suivante :
openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c 32 && echoReverse proxy
Les fichiers de configuration ci-dessus sont prévus pour être utilisés avec un reverse proxy.
Pour rappel, une page dédiée est disponible ici.
L’image Docker de Linuxserver.io propose un fichier sample de configuration, il vous suffit juste de modifier votre nom de domaine en conséquence :
sudo cp /opt/containers/nginx/nginx/proxy-confs/tinyauth.subdomain.conf.sample /opt/containers/nginx/nginx/proxy-confs/tinyauth.subdomain.confConfiguration de nginx
Vous devez maintenant activer Tinyauth dans vos fichiers de configuration présents dans /opt/containers/nginx/nginx/proxy-confs pour protéger les services souhaités. 2 lignes sont à décommenter.
Dans le bloc server :
include /config/nginx/tinyauth-server.conf;Et dans le bloc location :
include /config/nginx/tinyauth-location.conf;Redémarrez ensuite nginx pour prendre en compte vos modifications :
docker restart nginxConfiguration
Création des utilisateurs locaux
Maintenant que Tinyauth est installé, nous allons créer nos utilisateurs. On aurait pu les créer en amont, mais il dispose d’un outil intégré permettant de générer facilement la ligne à insérer dans le fichier tinyauth.env.
Pour cela, connectez vous au conteneur fraîchement démarré :
docker exec -it tinyauth shEt lancez la commande suivante :
./tinyauth user create -iRenseignez les éléments demandés (tabulation pour suivant) :

Spécifiez que vous voulez un format pour Docker, pour que le hash du mot de passe soit compatible (les symboles $ sont doublés). Vous allez avoir dans le retour une ligne de ce type :
testuser:$$2a$$10$$0fsXGdP6yfivZixOlpE.VOzjrheliau3x6f1Q1PyOJwtiTfnzGogGModifiez le fichier tinyauth.env pour ajouter ce user à la variable USERS. Vous pouvez en ajouter plusieurs en les séparant par des virgules.
Redéployez votre Tinyauth pour prendre en compte la nouvelle variable. Cela devrait être tout bon ! Vous devriez pouvoir profiter de votre nouveau service !

TOTP
Si vous voulez ajouter une double authentification TOTP, utilisez la commande suivante dans votre conteneur :
./tinyauth totp generate -iIl vous sera demandé de saisir la ligne créée précédemment. Vous allez vous retrouver avec un ENORME QR Code dans votre terminal :smile:
Mais c’est surtout la ligne en dessous qui va nous intéresser :
testuser:$$2a$$10$$0fsXGdP6yfivZixOlpE.VOzjrheliau3x6f1Q1PyOJwtiTfnzGogG:54JVQL5HDB7T2F7NO27JHLT2S2ITKHJNLa ligne contient désormais la clé TOTP en plus du mot de passe. Remplacez la ligne dans le fichier tinyauth.env et le tour est joué.
Il ne vous reste plus qu’à redéployer l’application pour prise en compte :

Authentification via GitHub OAuth
Si vous ne voulez pas avoir à gérer les mots de passe utilisateur, Tinyauth permet d’utiliser un service externe. Il est compatible avec les services suivants :
Dans cet exemple, nous allons utiliser GitHub OAuth. La documentation de Tinyauth est vraiment bien faite, je vous laisse aller voir sur le site pour la création de l’application côté Github.
Une fois votre configuration en place, vous devez modifier votre fichier tinyauth.env pour y ajouter les variables suivantes :
OAUTH_WHITELIST=user1@mail.com,user2@mail.com
GITHUB_CLIENT_ID=<id_app>
GITHUB_CLIENT_SECRET=<secret_key>OAUTH_WHITELIST: Le(s) compte(s) autorisé(s) (A spécifier, car sinon, tous les utilisateurs ayant un compte pourront se connecter)GITHUB_CLIENT_ID: L’ID de votre application créée sur GithubGITHUB_CLIENT_SECRET: La clé générée dans la configuration de votre app Github
Vous pouvez maintenant supprimer la variable
USERSdu fichiertinyauth.envsi vous ne voulez pas conserver la méthode d’authentification classique
Après un redéploiement de Tinyauth, il devrait désormais vous proposer la connexion via Github :

Je vous laisse consulter la documentation si vous désirez utiliser un autre service tiers.
Contrôle d’accès par labels
Même si Tinyauth est assez simpliste dans la gestion des droits, il reste possible de limiter les accès à vos applications. Tinyauth peut lire des labels de vos fichiers de déploiement Docker et agir en conséquence.
Pour cela, vous devez d’abord permettre à Tinyauth de pouvoir lire les labels. Dans votre fichier compose.yml, ajoutez l’entrée volumes suivante :
- Pour Docker :
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro- Pour Podman :
volumes:
- /var/run/user/1000/podman/podman.sock:/var/run/docker.sock:roEnsuite, pour chaque application, ajoutez les labels suivants à votre fichier compose.yml :
labels:
tinyauth.domain: mondomaine.fr
tinyauth.oauth.whitelist: user1@mail.comSi vous utilisez des comptes locaux :
labels:
tinyauth.domain: mondomaine.fr
tinyauth.users: testuserPensez à redéployer vos applications pour prise en compte. Si l’utilisateur ne figure pas dans la liste des utilisateurs autorisés, il sera alors renvoyé sur la page de Tinyauth.