Pourquoi auto-héberger son fournisseur OIDC
Chaque service auto-hébergé qui implémente sa propre base d'utilisateurs introduit une dépendance que vous devez gérer : mot de passe à réinitialiser, compte à révoquer, session à invalider. Multiplié par cinq ou dix services, cela devient un problème d'exploitation réel. Un fournisseur d'identité (IdP) centralise ce travail : une seule source d'identité, une révocation qui s'applique partout, un seul point de configuration MFA.
La question n'est pas de savoir s'il faut un IdP, mais lequel — et sur quelle base vous êtes prêt à l'opérer.
Ce que vous obtenez avec un IdP OIDC self-hosted
- Identité centralisée — un seul compte pour Gitea, Nextcloud, Grafana et tous les services compatibles OIDC.
- Révocation globale — désactiver un compte dans Pocket ID coupe l'accès à toutes les applications connectées au prochain renouvellement de token.
- Authentification par passkeys — Touch ID, Face ID ou clé FIDO2 comme seul facteur, sans mot de passe à faire circuler.
- Aucune dépendance cloud — vos identités restent sous votre juridiction, sans quota d'utilisateurs ni tarification à l'acte.
- Empreinte minimale — Pocket ID consomme moins de 50 Mo de RAM au repos, contre 300 à 600 Mo pour Authentik et 1 à 2 Go pour Keycloak.
- SQLite embarqué — aucun moteur de base de données externe à provisionner ou à sauvegarder séparément.
- Back-channel logout (v2.18.0) — lorsqu'un utilisateur est désactivé ou révoque un client, Pocket ID notifie les applications enregistrées et invalide leurs sessions côté serveur.
- Un seul conteneur — l'ensemble du service tient dans une image Docker de 30 Mo environ, sans dépendance Redis, sans worker séparé.
Prérequis chiffrés
Pocket ID est pensé pour les petites stacks. Ses prérequis sont intentionnellement bas :
- Docker 24+ et Docker Compose v2 — versions requises par l'image officielle.
- 512 Mo de RAM minimum sur le VPS — Pocket ID tourne sous les 50 Mo au repos, le reste sert au système et au reverse proxy.
- Un domaine et un certificat TLS — OIDC exige HTTPS sans exception ; sans domaine joignable publiquement (ou en réseau interne avec TLS), l'installation ne peut pas fonctionner.
- Aucune base de données externe — SQLite est embarquée. Si vous préférez PostgreSQL pour une sauvegarde simplifiée, le passage se fait en changeant une variable d'environnement.
Pocket ID ne gère ni SAML, ni LDAP, ni fédération d'annuaires. Si votre stack inclut des applications qui n'acceptent que SAML ou que vous devez fédérer un Active Directory, orientez-vous vers Authentik ou Keycloak. Pour une stack de services web modernes compatibles OIDC, Pocket ID couvre le besoin sans surplus.
Installation de Pocket ID
Préparer le VPS et le domaine
Commandez un VPS avec Ubuntu 22.04 ou Debian 12 et au moins 512 Mo de RAM. Créez un enregistrement DNS de type A pointant
auth.votre-domaine.comvers l'IP de votre VPS. Ce sous-domaine est l'URL publique de votre instance Pocket ID — elle doit être joignable avant la première configuration, car les redirections OIDC s'y appuient.Installez Docker et le plugin Compose :
curl -fsSL https://get.docker.com | shCréer le répertoire de travail
Sur le serveur, créez un répertoire dédié et placez-y le fichier Compose :
mkdir -p /opt/pocket-id && cd /opt/pocket-idÉcrire le fichier docker-compose.yml
Créez
/opt/pocket-id/docker-compose.ymlavec le contenu suivant :services: pocket-id: image: ghcr.io/pocket-id/pocket-id:v2.18.0 container_name: pocket-id restart: unless-stopped ports: - "1411:1411" volumes: - ./data:/app/data environment: APP_URL: "https://auth.votre-domaine.com" TRUST_PROXY: "true"La variable
APP_URLdoit correspondre exactement à l'URL publique de votre instance, schéma HTTPS compris.TRUST_PROXY: "true"indique à Pocket ID de faire confiance aux en-têtesX-Forwarded-*transmis par le reverse proxy.Configurer le reverse proxy nginx
Créez le vhost nginx pour
auth.votre-domaine.com. Pocket ID écoute en HTTP sur le port 1411 ; le reverse proxy se charge de TLS.server { listen 443 ssl http2; server_name auth.votre-domaine.com; ssl_certificate /etc/letsencrypt/live/auth.votre-domaine.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/auth.votre-domaine.com/privkey.pem; # Augmenter les buffers pour les en-têtes OIDC proxy_buffer_size 256k; proxy_buffers 4 512k; proxy_busy_buffers_size 512k; location / { proxy_pass http://127.0.0.1:1411; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }Procurez le certificat avec Certbot avant de recharger nginx :
certbot certonly --nginx -d auth.votre-domaine.com nginx -t && systemctl reload nginxNote sur les buffers : Pocket ID produit des en-têtes de réponse plus grands que la valeur nginx par défaut. Sans les directives
proxy_buffer_sizeetproxy_buffers, les pages peuvent répondre avec une erreur 502 silencieuse.Démarrer le conteneur
Depuis
/opt/pocket-id:docker compose up -d docker compose logs -f pocket-idLa ligne de log
Starting Pocket ID on :1411confirme que le serveur est prêt. Accédez àhttps://auth.votre-domaine.compour terminer la configuration initiale.Créer le compte administrateur et enregistrer un passkey
À la première visite, Pocket ID propose de créer le compte administrateur. Renseignez votre e-mail, puis enregistrez immédiatement un passkey : cliquez sur Paramètres → Passkeys → Ajouter et suivez l'invite de votre navigateur (Touch ID, Windows Hello ou clé FIDO2). Une fois le passkey enregistré, c'est le seul facteur requis pour les connexions suivantes.
Déclarer votre première application OIDC
Dans l'interface d'administration, ouvrez OIDC Clients → Nouveau client. Renseignez :
- Nom : l'identifiant lisible de l'application (ex.Gitea)
- Callback URL : l'URL de redirection déclarée dans l'application cliente (ex.https://git.votre-domaine.com/user/oauth2/pocket-id/callback)Pocket ID v2.18.0 crée automatiquement un
client_secretà la création — récupérez-le immédiatement, il ne sera plus affiché en clair par la suite.Notez le
Client IDet l'URL de découvertehttps://auth.votre-domaine.com/.well-known/openid-configuration: ce sont les deux valeurs à saisir dans l'application cliente.Tester le flux depuis l'application cliente
Dans Gitea, allez dans Administration → Sources d'authentification → Ajouter → OAuth2. Sélectionnez le fournisseur
OpenID Connect, renseignez leClient ID, leClient Secretet l'URL de découverte. Déclenchez une connexion de test : le navigateur doit être redirigé versauth.votre-domaine.com, vous proposer le passkey enregistré, puis vous renvoyer vers Gitea en étant connecté.
Configuration post-installation
Après la mise en service initiale, quelques réglages améliorent la robustesse de l'instance.
Durcissement de l'instance
Restreindre les inscriptions : par défaut, Pocket ID autorise tout visiteur à créer un compte. En production, désactivez l'inscription publique dans Paramètres → Général → Autoriser l'inscription et invitez les utilisateurs individuellement.
Sauvegarder le volume de données : toute la persistance (base SQLite, clés de signature OIDC) vit dans ./data. Un rsync quotidien vers un stockage externe suffit pour une petite instance. Si vous migrez vers PostgreSQL, ajoutez DB_PROVIDER=postgresql et DB_CONNECTION_STRING=... à votre fichier Compose.
Épingler la version de l'image : l'exemple ci-dessus utilise v2.18.0 explicitement. Ne laissez pas latest en production — une mise à jour automatique peut introduire une migration de schéma que votre backup n'a pas encore couverte.
Limiter l'exposition réseau : si Pocket ID ne doit être accessible que depuis le réseau interne du VPS (pour une stack Docker entièrement locale), remplacez ports: "1411:1411" par une liaison sur l'interface locale et faites communiquer nginx avec le conteneur via le réseau Docker interne.
Dépannage
Les erreurs les plus fréquentes lors de la mise en service de Pocket ID suivent des patrons bien identifiés.
Erreurs courantes et solutions
- 502 Bad Gateway sur toutes les pages — cause la plus fréquente : les buffers nginx sont trop petits pour les en-têtes de réponse OIDC de Pocket ID. Ajoutez
proxy_buffer_size 256k,proxy_buffers 4 512ketproxy_busy_buffers_size 512kdans votre bloclocation /et rechargez nginx. redirect_uri_mismatchlors du login — laCallback URLdéclarée dans Pocket ID ne correspond pas exactement à celle envoyée par l'application cliente. Vérifiez la présence ou l'absence d'un slash final, le schémahttpvshttpset le port. La correspondance doit être exacte, caractère pour caractère.invalid_clientau moment de l'échange du code — leclient_secretenvoyé par l'application ne correspond pas. En v2.18.0, Pocket ID crée un secret automatiquement à la création du client ; si vous n'avez pas noté ce secret, régénérez-en un depuis la fiche client dans l'administration.- Passkey refusé :
NotAllowedError— votre navigateur ne peut pas accéder aux API WebAuthn sans HTTPS. Vérifiez queAPP_URLest bien enhttps://...et que le certificat TLS est valide (ni auto-signé, ni expiré) ; Certbot doit avoir émis un certificat pour le bon domaine. - Les sessions ne sont pas invalidées après révocation — le back-channel logout nécessite que l'application cliente déclare une
Backchannel Logout URLdans sa fiche OIDC. Sans cette URL, Pocket ID ne peut pas notifier l'application ; les sessions existantes expireront à leur durée naturelle. Vérifiez que le champ est renseigné et joignable depuis le conteneur Pocket ID.
Pocket ID, Authentik, Keycloak, Authelia : que choisir
Faites défiler le tableau
| Critère | Pocket ID 2.18 | Authelia 4.39 | Authentik 2026.8 | Keycloak 26 |
|---|---|---|---|---|
| Protocoles IdP | OIDC/OAuth2 | OIDC/OAuth2 (beta) | OIDC, SAML 2.0, LDAP, SCIM | OIDC, SAML 2.0, LDAP, Kerberos |
| Authentification | Passkeys uniquement (FIDO2) | Mot de passe + MFA, passkeys | Mot de passe + MFA, passkeys | Mot de passe + MFA, OTP |
| RAM au repos | < 50 Mo | ~30 Mo | 200–400 Mo | 1–2 Go |
| Base de données | SQLite embarqué (ou PostgreSQL) | Fichier YAML (ou base externe) | PostgreSQL requis | PostgreSQL recommandé |
| Nombre de conteneurs | 1 | 1 | 3 (server, worker, PostgreSQL) | 2 (Keycloak + base) |
| Gestion des utilisateurs | Annuaire intégré, invitation par e-mail | Fichier ou provider externe | Annuaire intégré, LDAP, proxy social | Annuaire intégré, fédération LDAP/AD |
| Cas d'usage cible | Stack légère, passkeys, IdP simple | Couche forward-auth devant un proxy | SSO complet, SAML, flows visuels | SSO d'entreprise, multi-tenant, conformité |
Conclusion
Pocket ID v2.18.0 répond à un besoin précis : centraliser l'authentification d'une stack de services auto-hébergés sans payer le coût d'exploitation d'un Keycloak ou d'un Authentik. Un conteneur, SQLite, des passkeys, et moins de 50 Mo de RAM au repos. La v2.18.0 ajoute le back-channel logout pour invalider les sessions côté application dès qu'un compte est révoqué, et restaure la création automatique du client secret pour simplifier l'enregistrement des applications.
Si votre stack inclut des applications qui n'acceptent que SAML ou que vous avez besoin de fédérer un annuaire Active Directory, Authentik ou Keycloak sont plus adaptés. Pour tout le reste — des services web modernes compatibles OIDC sur un VPS de 1 ou 2 Go — Pocket ID est le choix qui vous laisse la RAM pour autre chose.
Consultez également nos guides sur Authentik et Keycloak pour choisir en connaissance de cause.