﻿﻿{"id":2471,"date":"2026-03-08T10:00:00","date_gmt":"2026-03-08T09:00:00","guid":{"rendered":"https:\/\/elearningsamba.com\/index.php\/pocket-id-lauth-par-passkey-pour-votre-homelab\/"},"modified":"2026-03-08T10:00:00","modified_gmt":"2026-03-08T09:00:00","slug":"pocket-id-lauth-par-passkey-pour-votre-homelab","status":"publish","type":"page","link":"https:\/\/elearningsamba.com\/index.php\/pocket-id-lauth-par-passkey-pour-votre-homelab\/","title":{"rendered":"Pocket ID &#8211; L&#8217;auth par passkey pour votre homelab"},"content":{"rendered":"<p>Si vous auto-h\u00e9bergez d\u00e9j\u00e0 des services chez vous, y&#8217;a un truc qui revient tout le temps c&#8217;est <strong>l&#8217;authentification<\/strong>. Chaque app a son propre login, ses propres mots de passe, et du coup vous finissez avec une ribambelle de comptes diff\u00e9rents pour des trucs qui tournent sur le m\u00eame serveur. Nextcloud par-ci, Jellyfin par-l\u00e0, Gitea en prime&#8230; C&#8217;est con hein, mais c&#8217;est comme \u00e7a !<\/p>\n<p>\n<a href=\"https:\/\/github.com\/pocket-id\/pocket-id\">Pocket ID<\/a><br \/>\n, c&#8217;est un provider OpenID Connect (OIDC) qui fait UNE chose et qui la fait bien : <strong>vous authentifier avec vos passkeys<\/strong>. Pas de mot de passe, pas de TOTP, pas de SMS&#8230; juste votre empreinte digitale via Touch ID, Face ID, Windows Hello, ou votre cl\u00e9 physique type YubiKey. Le projet tourne en Go c\u00f4t\u00e9 serveur (un seul binaire de ~15 Mo) et SvelteKit pour l&#8217;interface, le tout sous licence BSD-2-Clause.<\/p>\n<p>Bon, vous allez me dire &#8220;<em>y&#8217;a d\u00e9j\u00e0 Keycloak pour \u00e7a<\/em>&#8220;. Sauf que Keycloak, c&#8217;est un monstre. Genre, vous voulez juste centraliser l&#8217;auth de votre Nextcloud et de votre Jellyfin, et vous vous retrouvez \u00e0 configurer 47 fichiers XML. Pocket ID, c&#8217;est donc l&#8217;inverse&#8230; un simple <code>docker compose up -d<\/code> et hop, c&#8217;est lanc\u00e9 sur localhost:1411 ! En fait l&#8217;interface web est tellement propre que vous cr\u00e9ez vos clients OIDC en 3 clics, plut\u00f4t que de passer 2 heures dans la doc.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/korben.info\/cdn-cgi\/image\/width=1200,fit=scale-down,quality=90,f=avif\/pocket-id-auth-oidc-passkey\/pocket-id-auth-oidc-passkey-2.png\" alt=\"\" loading=\"lazy\"><\/p>\n<p>D&#8217;ailleurs, le truc cool c&#8217;est la liste des int\u00e9grations. Il y a plus de 80 services compatibles, document\u00e9s avec des proc\u00e9dures pas \u00e0 pas : Nextcloud, Immich, Grafana, Portainer, Proxmox, Vaultwarden, GitLab, Jellyfin&#8230; en gros tous les classiques du self-hosting. Si vous avez d\u00e9j\u00e0 mis en place<br \/>\n<a href=\"https:\/\/korben.info\/authelia-auth-reverse-proxy.html\">Authelia pour prot\u00e9ger vos services derri\u00e8re un reverse proxy<\/a><br \/>\n, Pocket ID c&#8217;est le compl\u00e9ment id\u00e9al c\u00f4t\u00e9 SSO.<\/p>\n<p>Attention par contre, y&#8217;a un pr\u00e9requis : <strong>HTTPS obligatoire<\/strong>. C&#8217;est pas un caprice hein, c&#8217;est une contrainte technique de WebAuthn (le standard derri\u00e8re les<br \/>\n<a href=\"https:\/\/korben.info\/passkeys-nouvelle-methode-connexion-sans-mot-de-passe.html\">passkeys<\/a><br \/>\n). Du coup si votre homelab tourne en HTTP sur le r\u00e9seau local genre<br \/>\n<a href=\"http:\/\/192.168.1.x\/\">http:\/\/192.168.1.x<\/a><br \/>\n&#8230; faudra d&#8217;abord passer par un reverse proxy avec certificat TLS. Caddy fait \u00e7a carr\u00e9ment bien avec ses certificats Let&#8217;s Encrypt auto-g\u00e9r\u00e9s sur le port 443, c&#8217;est m\u00eame plut\u00f4t facile \u00e0 d\u00e9ployer. Il y a aussi<br \/>\n<a href=\"https:\/\/korben.info\/nginx-proxy-manager.html\">Nginx Proxy Manager<\/a><br \/>\nqui est g\u00e9nial pour tout ce qui est reverse proxy facile \u00e0 impl\u00e9menter !<\/p>\n<p>Ensuite, c\u00f4t\u00e9 installation, Pocket-ID vous donne le choix : Docker (le plus simple), standalone, Proxmox, Unraid, Kubernetes ou m\u00eame NixOS.<\/p>\n<p>Y&#8217;a aussi un syst\u00e8me de groupes d&#8217;utilisateurs et des options de suivi pour savoir qui s&#8217;est connect\u00e9 quand, depuis quelle IP. Pas mal hein, pour un outil qui tient dans un conteneur Docker de 50 Mo !<\/p>\n<p>Bon, c&#8217;est pas non plus parfait hein. Le fait de n&#8217;accepter QUE les passkeys, \u00e7a veut dire que si un de vos utilisateurs n&#8217;a pas de device compatible (vieux navigateur, OS ancien), il sera coinc\u00e9. Et si vous perdez votre YubiKey sans avoir enregistr\u00e9 de passkey de secours sur un iPhone ou un Android&#8230; bah bon courage. C&#8217;est un choix d\u00e9lib\u00e9r\u00e9 des devs, mais faut quand m\u00eame le savoir avant de migrer toute votre infra dessus.<\/p>\n<p>Bref, simple, efficace, et \u00e7a fait pas semblant d&#8217;\u00eatre autre chose. Ah et<br \/>\n<a href=\"https:\/\/demo.pocket-id.org\/start-demo\">y&#8217;a une d\u00e9mo ici<\/a><br \/>\npour tester avant de tout casser sur votre serveur ^^.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si vous auto-h\u00e9bergez d\u00e9j\u00e0 des services chez vous, y&#8217;a un truc qui revient tout le temps c&#8217;est l&#8217;authentification. Chaque app a son propre login, ses propres mots de passe, et du coup vous finissez avec une ribambelle de comptes diff\u00e9rents pour des trucs qui tournent sur le m\u00eame serveur. Nextcloud par-ci, Jellyfin par-l\u00e0, Gitea en prime&#8230; C&#8217;est con hein, mais c&#8217;est comme \u00e7a ! Pocket ID , c&#8217;est un provider OpenID Connect (OIDC) qui fait UNE chose et qui la fait bien : vous authentifier avec vos passkeys. Pas de mot de passe, pas de TOTP, pas de SMS&#8230; juste votre empreinte digitale via Touch ID, Face ID, Windows Hello, ou votre cl\u00e9 physique type YubiKey. Le projet tourne en Go c\u00f4t\u00e9 serveur (un seul binaire de ~15 Mo) et SvelteKit pour l&#8217;interface, le tout sous licence BSD-2-Clause. Bon, vous allez me dire &#8220;y&#8217;a d\u00e9j\u00e0 Keycloak pour \u00e7a&#8220;. Sauf que Keycloak, c&#8217;est un monstre. Genre, vous voulez juste centraliser l&#8217;auth de votre Nextcloud et de votre Jellyfin, et vous vous retrouvez \u00e0 configurer 47 fichiers XML. Pocket ID, c&#8217;est donc l&#8217;inverse&#8230; un simple docker compose up -d et hop, c&#8217;est lanc\u00e9 sur localhost:1411 ! En fait l&#8217;interface web est tellement propre que vous cr\u00e9ez vos clients OIDC en 3 clics, plut\u00f4t que de passer 2 heures dans la doc. D&#8217;ailleurs, le truc cool c&#8217;est la liste des int\u00e9grations. Il y a plus de 80 services compatibles, document\u00e9s avec des proc\u00e9dures pas \u00e0 pas : Nextcloud, Immich, Grafana, Portainer, Proxmox, Vaultwarden, GitLab, Jellyfin&#8230; en gros tous les classiques du self-hosting. Si vous avez d\u00e9j\u00e0 mis en place Authelia pour prot\u00e9ger vos services derri\u00e8re un reverse proxy , Pocket ID c&#8217;est le compl\u00e9ment id\u00e9al c\u00f4t\u00e9 SSO. Attention par contre, y&#8217;a un pr\u00e9requis : HTTPS obligatoire. C&#8217;est pas un caprice hein, c&#8217;est une contrainte technique de WebAuthn (le standard derri\u00e8re les passkeys ). Du coup si votre homelab tourne en HTTP sur le r\u00e9seau local genre http:\/\/192.168.1.x &#8230; faudra d&#8217;abord passer par un reverse proxy avec certificat TLS. Caddy fait \u00e7a carr\u00e9ment bien avec ses certificats Let&#8217;s Encrypt auto-g\u00e9r\u00e9s sur le port 443, c&#8217;est m\u00eame plut\u00f4t facile \u00e0 d\u00e9ployer. Il y a aussi Nginx Proxy Manager qui est g\u00e9nial pour tout ce qui est reverse proxy facile \u00e0 impl\u00e9menter ! Ensuite, c\u00f4t\u00e9 installation, Pocket-ID vous donne le choix : Docker (le plus simple), standalone, Proxmox, Unraid, Kubernetes ou m\u00eame NixOS. Y&#8217;a aussi un syst\u00e8me de groupes d&#8217;utilisateurs et des options de suivi pour savoir qui s&#8217;est connect\u00e9 quand, depuis quelle IP. Pas mal hein, pour un outil qui tient dans un conteneur Docker de 50 Mo ! Bon, c&#8217;est pas non plus parfait hein. Le fait de n&#8217;accepter QUE les passkeys, \u00e7a veut dire que si un de vos utilisateurs n&#8217;a pas de device compatible (vieux navigateur, OS ancien), il sera coinc\u00e9. Et si vous perdez votre YubiKey sans avoir enregistr\u00e9 de passkey de secours sur un iPhone ou un Android&#8230; bah bon courage. C&#8217;est un choix d\u00e9lib\u00e9r\u00e9 des devs, mais faut quand m\u00eame le savoir avant de migrer toute votre infra dessus. Bref, simple, efficace, et \u00e7a fait pas semblant d&#8217;\u00eatre autre chose. Ah et y&#8217;a une d\u00e9mo ici pour tester avant de tout casser sur votre serveur ^^.<\/p>\n","protected":false},"author":1,"featured_media":2472,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"give_campaign_id":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_kadence_starter_templates_imported_post":false,"footnotes":""},"class_list":["post-2471","page","type-page","status-publish","has-post-thumbnail","hentry"],"campaignId":"","_links":{"self":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/2471","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/comments?post=2471"}],"version-history":[{"count":0,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/2471\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media\/2472"}],"wp:attachment":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media?parent=2471"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}