Pocket ID: Passwortloses SSO für deine selbst gehosteten Apps

Erst läuft nur die Fotoverwaltung. Dann kommen ein Wiki, eine Dokumentenablage und ein paar interne Werkzeuge dazu. Irgendwann bedeutet eine Einladung drei neue Konten. Und wenn jemand keinen Zugriff mehr braucht, musst du dich erinnern, in welchen Anwendungen du ihn überall freigeschaltet hast.

Pocket ID zieht die Anmeldung an einer Stelle zusammen. Du betreibst den Dienst selbst und meldest dich mit einem Passkey an. Angebundene Anwendungen vertrauen Pocket ID über OpenID Connect (OIDC). Für ein Homelab oder ein kleines Team ist das ein überschaubarer Einstieg in Single Sign-on (SSO). Pocket ID im Überblick

Was den Login mit Passkeys sicherer macht

SSO und passwortloser Login lösen zwei verschiedene Probleme. SSO sorgt dafür, dass mehrere Apps dieselbe Anmeldung nutzen können. Bei Pocket ID meldest du dich im Alltag mit einem Passkey an. Je nach Gerät bestätigst du das etwa per Fingerabdruck, Gesichtserkennung oder Geräte-PIN.

Technisch signiert dein Passkey eine Anfrage. Pocket ID prüft die Signatur mit dem hinterlegten öffentlichen Schlüssel. Die Anmeldung ist an die passende Domain gebunden. Eine nachgebaute Loginseite auf einer fremden Domain kann deinen Passkey deshalb nicht für den echten Dienst einsetzen. Und beim regulären Login gibt es kein Passwort, das jemand abgreifen oder bei anderen Diensten ausprobieren könnte. FIDO Alliance zur Phishing-Resistenz von Passkeys

Wie gut das schützt, hängt auch von den anderen Anmeldewegen ab. Bleiben lokale App-Passwörter aktiv, gelten deren Risiken weiter. Aktivierst du bei Pocket ID Login-Codes auf Anfrage per E-Mail, wird auch das Postfach zum Zugang. Ein gestohlenes Sitzungscookie kann außerdem eine bereits erfolgte Anmeldung ausnutzen. Anmeldemethoden in Pocket ID

Ein Smartphone bestätigt eine Passkey-Anmeldung für drei angebundene Anwendungen.
Der Passkey bestätigt deine Identität bei Pocket ID. Die angebundenen Apps nutzen diese Anmeldung.

Ein Konto für mehrere Apps, mit getrennten Berechtigungen

Wenn du von der Fotoverwaltung ins Wiki wechselst, kann Pocket ID die bestehende Anmeldung wiederverwenden. Die Apps legen trotzdem eigene Sitzungen an. Beim ersten Besuch kann Pocket ID nachfragen, ob du deine Profildaten mit der App teilen möchtest.

In Pocket ID kannst du pro Anwendung festlegen, welche Gruppen sich anmelden dürfen. So kann die Familie auf die Fotos zugreifen, während ein internes Dashboard nur für eine Admin-Gruppe offensteht. Was jemand innerhalb der App tun darf, entscheidet weiterhin die App. Beim Entzug von Zugriffen lohnt sich ein Blick auf bestehende Sitzungen und lokale Konten, weil sie je nach App bestehen bleiben können. OIDC-Clients und Gruppenzugriff einrichten

Docker Compose, HTTPS und der erste Login

Pocket ID ist unter der BSD-2-Clause-Lizenz verfügbar. Für die Software fällt keine Lizenzgebühr an. Hosting, Updates und Backups gehören weiterhin zum Betrieb. Im Standard-Setup brauchst du mit Docker Compose einen Container und ein dauerhaft eingebundenes Datenverzeichnis. SQLite ist bereits dabei. Quellcode und Lizenz

1. Compose-Datei und .env anlegen

Vorausgesetzt sind Docker mit Compose, eine eigene Subdomain und ein HTTPS-Reverse-Proxy auf demselben Host. Lege ein Verzeichnis für Pocket ID an und speichere dort diese compose.yaml. Die Datenbank und Uploads bleiben in ./data erhalten, wenn der Container ersetzt wird.

services:
  pocket-id:
    image: ghcr.io/pocket-id/pocket-id:v2
    restart: unless-stopped
    env_file: .env
    ports:
      - "127.0.0.1:1411:1411"
    volumes:
      - ./data:/app/data

Lege daneben die Datei .env an. Ersetze die Beispieladresse durch deine eigene HTTPS-Adresse und den Platzhalter durch die Ausgabe von openssl rand -base64 32. Halte die .env privat und sichere den Schlüssel für die Wiederherstellung.

APP_URL=https://id.example.com
ENCRYPTION_KEY=HIER_DEINEN_ZUFALLSSCHLUESSEL_EINTRAGEN

2. HTTPS einrichten

Lass deine Subdomain auf den Reverse Proxy zeigen und leite sie mit gültigem TLS-Zertifikat an http://127.0.0.1:1411 weiter. Der Port ist in diesem Beispiel nur auf dem Docker-Host erreichbar. Für Caddy, der direkt auf dem Host läuft, sieht der Eintrag so aus. Verwende dieselbe Domain wie in APP_URL.

id.example.com {
    reverse_proxy 127.0.0.1:1411
}

Läuft dein Proxy selbst als Container, verbinde ihn mit Pocket ID über ein gemeinsames Docker-Netz und verwende dort pocket-id:1411 als Ziel. In diesem Fall kannst du den Abschnitt ports weglassen. Pocket-ID-Dokumentation zu Reverse Proxys

3. Starten und den ersten Admin einrichten

Führe im Verzeichnis mit der Compose-Datei diese Befehle aus.

docker compose up -d
docker compose ps

Öffne https://id.example.com/setup mit deiner eigenen Domain. Lege das erste Admin-Konto an, registriere einen Passkey und teste die Anmeldung in einem privaten Browserfenster. Halte den Zugriff auf die Setup-Seite bis zur Einrichtung auf deinen Admin-Zugang beschränkt. Sobald das erste Konto existiert, ist die Setup-Seite geschlossen. Wenn der Container nicht läuft, helfen die Meldungen aus docker compose logs --tail=50 pocket-id. Offizielle Installationsanleitung

Neue Nutzer anlegen und bestehende Konten verbinden

Wenn du ein neues Projekt aufsetzt, kannst du OIDC von Anfang an einplanen. Benutzerkonten in Pocket ID legst du zum Beispiel selbst an oder du verschickst einen Einladungslink. Die Nutzer hinterlegen ihren eigenen Passkey. Für jede App richtest du einen OIDC-Client ein, hinterlegst ihre genaue Rücksprungadresse und gibst der Anwendung die Discovery-URL, die Client-ID und bei einem vertraulichen Client das Client-Secret. Benutzerverwaltung in Pocket ID · Erste App verbinden

Immich zeigt, was das praktisch bringt. Mit Auto Register legt Immich beim ersten erfolgreichen SSO-Login selbst ein lokales Konto an. Wer schon ein Immich-Konto mit Fotos hat, kann es in den Kontoeinstellungen mit der OIDC-Identität verbinden und das vorhandene Konto weiterverwenden. Damit sparst du dir bei neuen Projekten die doppelte Kontopflege und kannst bei bestehenden Anwendungen erst mit einem Testkonto prüfen, wie die Verknüpfung funktioniert. Immich-Dokumentation zu OIDC · Immich mit Pocket ID verbinden

Wenn Konten schon vor der ersten Anmeldung bereitstehen oder zentral wieder entzogen werden sollen, kann Pocket ID Benutzer und Gruppen per SCIM an die App übertragen. Dafür braucht die Zielanwendung einen passenden SCIM-Endpunkt. Für viele kleine Projekte reicht die Kontoanlage beim ersten Login. SCIM in Pocket ID

Wenn der zentrale Login ausfällt

Pocket ID kann zum Single Point of Failure werden. Wenn der Container, der Host, DNS oder der HTTPS-Zugang ausfällt, können neue SSO-Anmeldungen an mehreren Diensten gleichzeitig scheitern. Bestehende App-Sitzungen können weiterlaufen, bis sie ablaufen oder die App erneut einen Token vom Login-Dienst braucht.

Ein unterbrochener Weg zu einem Server und drei Symbole für den Notfallplan: Sicherheitsschlüssel, Backup und unabhängiger Zugang.
Ein Ersatz-Passkey, ein getestetes Backup und ein unabhängiger Notzugang helfen in unterschiedlichen Ausfällen.

Der Praxisbericht von uptime.bet empfiehlt einen zweiten Admin-Passkey und ein Backup von Daten und Schlüssel. Für den Betrieb würde ich beides getrennt testen. Der Ersatz-Passkey hilft beim Geräteverlust. Bei einem Serverausfall brauchst du einen Weg, den Dienst wiederherzustellen oder deine wichtigsten Apps direkt zu erreichen. Pocket ID im Selfhosting-Praxisbericht von uptime.bet

  • Ersatz-Passkey hinterlegen. Registriere für Admins einen zweiten, unabhängig verfügbaren Passkey, etwa auf einem separaten Hardware-Sicherheitsschlüssel. Wenn alle Admin-Passkeys weg sind und Pocket ID läuft, kannst du mit unabhängigem Serverzugang per CLI einen zeitlich begrenzten Einmalzugang erzeugen. Kontowiederherstellung in Pocket ID
  • Wiederherstellung testen. Sichere das Datenverzeichnis konsistent, bei SQLite zum Beispiel bei gestopptem Container. Sichere auch die Compose-Konfiguration, den Verschlüsselungsschlüssel und die nötige Proxy-Konfiguration geschützt außerhalb des Hosts. Teste die Wiederherstellung isoliert und plane für den Ernstfall dieselbe Login-Domain ein, damit bestehende Passkeys weiter nutzbar sind.
  • Unabhängigen Notzugang behalten. Wo die Anwendung es unterstützt, halte für kritische Dienste ein separates lokales Admin-Konto mit starkem Passwort und MFA bereit. Sorge dafür, dass du im Ausfall sowohl die App als auch die Zugangsdaten ohne Pocket ID erreichst.
  • Von außen prüfen. Überwache die HTTPS-Adresse von einem System aus, das bei einem Ausfall des Pocket-ID-Hosts weiterläuft. Teste zusätzlich nach Änderungen einen echten Login in einer angebundenen App. Ein erreichbarer Webserver allein sagt wenig über die vollständige Anmeldung aus. Uptime Kuma auf sotzny.de

Pocket ID ist kostenlos. SSO in der Ziel-App kann trotzdem kosten.

In der Selfhosting-Szene hat diese Preisgrenze einen Namen: SSO Tax. Gemeint ist, dass du für die zentrale Anmeldung ein größeres Paket kaufen musst, obwohl du dessen übrige Funktionen kaum nutzt. Das ist gerade bei einer Handvoll Konten schwer zu rechtfertigen. Wie die Übersicht von SSD Nodes zeigt, lohnt sich aber der Blick auf die konkrete Edition. Es gibt genug Gegenbeispiele, um sich bei der App-Auswahl Spielraum zu verschaffen. Einordnung der SSO Tax bei SSD Nodes

Bei Bitwarden ist der SSO-Login für Organisationen beispielsweise Teil von Enterprise. Immich bringt OIDC auch ohne kostenpflichtiges SSO-Paket mit. Wenn du eine App ohnehin nur allein nutzt, kann der vorhandene Login ausreichen. Für neue Projekte mit mehreren Anwendungen lohnt es sich, vorab zu prüfen, ob die geplante Edition einen eigenen OIDC-Anbieter zulässt und ob der Login auch in den genutzten mobilen Apps funktioniert. Bitwarden-Editionen · Übersicht selbst gehosteter Apps mit kostenlosem OIDC

Fazit

Pocket ID ist einfach einzurichten, leichtgewichtig und absolut sinnvoll, wenn mehrere eigene Anwendungen denselben Login nutzen sollen. Gerade bei neuen Projekten lässt sich OIDC von Anfang an einplanen, bevor du überall getrennte Konten aufgebaut hast. Für den Einstieg reicht eine App. Wenn der Login, der zweite Admin-Passkey und der Wiederanlauf funktionieren, kannst du die nächsten Dienste anbinden.

Über Danny Sotzny

Hallo, ich bin Danny Sotzny und bin Software- entwickler und Fotograf. Dabei beschäftige ich mich mit aktuellen Technologien und bekannten Problemen. Schwerpunkte setze ich bei der Webentwicklung (PHP/JS) und der Software- entwicklung mit .NET (C#). Der Blog dient für mich selbst als Gedächtnishilfe für typische und alltägliche Probleme, aber auch persönliche Erlebnisse werden veröffentlicht. Ich betreibe zusätzlich noch Foto-Sotzny.de für meine Fotografien und sotzny.net, was meine Webseite für die Softwareentwicklung ist.
Dieser Beitrag wurde unter Blogroll abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen für den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.