Files
docudjeex/content/fr/3.serveex/3.security/4.pocket-id.md
T
2026-09-05 22:10:30 +02:00

9.7 KiB

title, description
title description
Pocket ID Installer Pocket ID, un fournisseur OIDC auto-hébergé et léger qui permet de se connecter à vos autres applications avec une passkey plutôt qu'un mot de passe.

:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}

Pocket ID est un fournisseur OIDC (OpenID Connect) minimaliste et auto-hébergé, entièrement construit autour des passkeys : au lieu de gérer des mots de passe, vous et vos utilisateurs vous connectez aux applications compatibles avec une passkey (empreinte digitale, reconnaissance faciale, ou clé de sécurité matérielle). Il tourne dans un unique conteneur léger, sans base de données externe à gérer, et fait une seule chose et la fait bien : délivrer des connexions OIDC.

pocketid

C'est donc un bon choix si vous voulez simplement un backend SSO simple et rapide, par exemple pour l'associer à TinyAuth en tant que forward-auth léger, ou pour vous connecter directement aux applications qui gèrent nativement OIDC.

Installation

::file-tree

tree: /: - srv: - docker: - pocket-id: - compose.yaml - .env - data/

::

::steps{level="3"}

Créer le dossier de données

sudo mkdir -p /srv/docker/pocket-id/data

Générer une clé de chiffrement

openssl rand -base64 32

Gardez le résultat, vous en aurez besoin pour le fichier .env ci-dessous.

Déployer la stack

Ouvrez Dockge, cliquez sur compose, nommez la stack pocket-id, et ajoutez la configuration suivante :

---
services:
  pocket-id:
    image: pocketid/pocket-id:v2
    container_name: pocket-id
    restart: unless-stopped
    env_file:
      - .env
    volumes:
      - /srv/docker/pocket-id/data:/app/data
    ports:
      - 1411:1411
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:1411/healthz"]
      interval: 90s
      timeout: 5s
      retries: 3

::tip{icon=""} Ajoutez le label Watchtower pour automatiser les mises à jour :

---
services:
  pocket-id:
    #...
    labels:
      - com.centurylinklabs.watchtower.enable=true

::

Renseigner vos variables d'environnement

Remplissez le fichier .env :

APP_URL=https://id.mondomaine.fr
ENCRYPTION_KEY=
TRUST_PROXY=true
Variable Valeur Exemple
APP_URL{lang=properties} L'URL publique par laquelle vous joindrez Pocket ID (voir l'exposition plus bas) https://id.mondomaine.fr
ENCRYPTION_KEY{lang=properties} La clé générée ci-dessus Q2pVEqsTNRkJSO9SkJzU3KZ2...
TRUST_PROXY{lang=properties} Nécessaire puisque Pocket ID se trouve derrière Swag true

Déployez la stack. L'interface locale est disponible sur http://ipdevotreserveur:1411.

Terminé !

::

Première connexion

Pocket ID n'utilise pas de mots de passe : votre premier compte est créé avec une passkey, que votre navigateur ou votre système génère pour vous (Windows Hello, Touch ID, un téléphone, ou une clé matérielle comme une YubiKey).

  • Allez sur http://ipdevotreserveur:1411/setup
  • Suivez les instructions pour créer votre compte administrateur et enregistrer votre première passkey

::note

Comme APP_URL pointe déjà vers votre futur domaine public, l'enregistrement de la passkey peut vous demander d'ouvrir Pocket ID depuis ce domaine. Exposez-le d'abord (voir plus bas) si la configuration ne se termine pas en local. ::

Exposer Pocket ID avec Swag

Les autres applications doivent joindre Pocket ID en HTTPS pour finaliser le processus de connexion OIDC, il doit donc être exposé même si vous ne l'utilisez que depuis chez vous.

::note

Nous partons du principe que vous avez le sous-domaine id.mondomaine.fr avec un CNAME pointant vers mondomaine.fr dans votre zone DNS. Et bien sûr, à moins d'utiliser Cloudflare Zero Trust, le port 443 de votre box doit être redirigé vers le port 443 de votre serveur dans les règles NAT. ::

::steps{level="3"}

Ajouter le réseau de Pocket ID à SWAG

Allez dans Dockge et modifiez le fichier compose de SWAG en y ajoutant le réseau de Pocket ID :

---
services:
  swag:
     container_name: # ...
      # ... 
     networks:                # Rattache le conteneur au réseau personnalisé 
      # ...           
      - pocket-id             # Nom du réseau déclaré

networks:                     # Définit le réseau personnalisé
  # ...
  pocket-id:                  # Nom du réseau déclaré
    name: pocket-id_default   # Nom réel du réseau externe
    external: true            # Le marque comme défini à l'extérieur

Redéployez la stack et attendez que SWAG soit pleinement opérationnel.

::note

Nous partons ici du principe que le nom du réseau de Pocket ID est pocket-id_default. Vous pouvez vérifier la connexion en visitant le tableau de bord de SWAG sur http://ipdevotreserveur:81. ::

Créer le fichier subdomain.conf

Dans les dossiers de Swag, créez le fichier id.subdomain.conf :

::tip{icon="" to="/serveex/files/file-browser-quantum"} Astuce : utilisez File Browser Quantum pour naviguer et modifier les fichiers plutôt que des commandes dans le terminal. ::

sudo nano /srv/docker/swag/config/nginx/proxy-confs/id.subdomain.conf

Collez la configuration suivante :

## Version 2023/12/19

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name id.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    location / {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app pocket-id;
        set $upstream_port 1411;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;
    }
}

::caution

Ne mettez pas Pocket ID derrière une autre couche d'authentification (TinyAuth, auth HTTP...). C'est le fournisseur d'identité lui-même, le verrouiller empêcherait quiconque, vous compris, de se connecter. ::

Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.

Visiter votre nouveau sous-domaine

Attendez quelques minutes, puis ouvrez https://id.mondomaine.fr dans votre navigateur.

::caution

Si ça ne marche pas : vérifiez les règles de votre pare-feu. ::

Terminé !

::

Enregistrer un client OIDC

Pour qu'une autre application (par exemple TinyAuth) se connecte via Pocket ID, vous devez l'enregistrer comme client OIDC :

::steps{level="3"}

Se connecter à Pocket ID

Allez sur https://id.mondomaine.fr et connectez-vous avec votre passkey.

Créer le client OIDC

Allez dans Administration > OIDC Clients, puis cliquez sur Add OIDC Client. Renseignez un nom (par exemple TinyAuth) et l'URL de callback de l'application (fournie par l'application que vous protégez).

Conserver les identifiants du client

Enregistrez, puis copiez le Client ID et le Client Secret générés. Vous en aurez besoin dans la configuration de l'autre application.

Terminé !

::

Connecter Pocket ID à TinyAuth

TinyAuth peut déléguer sa connexion à Pocket ID plutôt que (ou en plus de) son identifiant/mot de passe local, de sorte que quiconque visite une application protégée s'authentifie avec une passkey et se retrouve redirigé.

::steps{level="3"}

Enregistrer TinyAuth comme client OIDC

Enregistrez un client OIDC nommé TinyAuth, avec cette URL de callback :

https://tinyauth.mondomaine.fr/api/oauth/callback/pocketid

Ajouter le fournisseur Pocket ID dans TinyAuth

Copiez le Client ID et le Client Secret que Pocket ID vous donne, puis modifiez le fichier .env de TinyAuth :

sudo nano /srv/docker/tinyauth/.env

Ajoutez ceci :

TINYAUTH_OAUTH_PROVIDERS_POCKETID_NAME=Pocket ID
TINYAUTH_OAUTH_PROVIDERS_POCKETID_CLIENTID=
TINYAUTH_OAUTH_PROVIDERS_POCKETID_CLIENTSECRET=
TINYAUTH_OAUTH_PROVIDERS_POCKETID_AUTHURL=https://id.mondomaine.fr/authorize
TINYAUTH_OAUTH_PROVIDERS_POCKETID_TOKENURL=https://id.mondomaine.fr/api/oidc/token
TINYAUTH_OAUTH_PROVIDERS_POCKETID_USERINFOURL=https://id.mondomaine.fr/api/oidc/userinfo
TINYAUTH_OAUTH_PROVIDERS_POCKETID_REDIRECTURL=https://tinyauth.mondomaine.fr/api/oauth/callback/pocketid
TINYAUTH_OAUTH_PROVIDERS_POCKETID_SCOPES=openid email profile
Variable Valeur
CLIENTID{lang=properties} Le client ID copié depuis Pocket ID
CLIENTSECRET{lang=properties} Le client secret copié depuis Pocket ID
AUTHURL / TOKENURL / USERINFOURL{lang=properties} L'URL publique de Pocket ID, avec les chemins indiqués ci-dessus

Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.

Redéployer la stack

Redéployez la stack TinyAuth. À votre prochaine visite sur https://tinyauth.mondomaine.fr, vous verrez une option « Login with Pocket ID » à côté du formulaire de connexion local.

::tip{icon=""} Pour aller directement sur Pocket ID et masquer le formulaire de connexion local, ajoutez TINYAUTH_OAUTH_AUTOREDIRECT=pocketid au même fichier .env. ::

Terminé !

::

Et voilà ! TinyAuth propose désormais une connexion sans mot de passe via Pocket ID pour chaque application qu'il protège.