Files
ProxLedger/docs/issues/028-passkeys.md
T
florian.wildeandClaude Opus 5 2f45e33e20 feat(auth): Rollen, Benutzerverwaltung und Passkeys (#027, #028)
Drei Rollen: Administrator, Techniker, Kunde. Jede der 28 Aktionen nennt das
Recht, das sie verlangt; die Rechte stehen an einer Stelle. Kundenkonten
haengen an genau einem Kunden und sehen nur dessen Hosts und Rechnungen -
ohne Einkaufspreise und Marge. Die Einschraenkung sitzt in den Abfragen
selbst, damit keine Seite vergessen kann, sie weiterzugeben; sechs Tests
pruefen das.

Dabei gefunden: Neu ueber OIDC angelegte Konten haetten die Vorgabe des
Datenmodells geerbt - ADMIN. Jetzt gibt es dafuer eine Einstellung mit der
Vorgabe Techniker.

Passkeys (#028) als gleichwertiger, passwortloser Anmeldeweg neben Passwort
und OIDC. Mehrere je Konto, Aufgabe in einem kurzlebigen Cookie, rpID aus der
oeffentlichen Adresse. Ohne HTTPS sagt die Seite es, statt still zu scheitern.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-19 00:46:29 +02:00

1.8 KiB
Raw Blame History

#028 Anmeldung mit Passkeys

Status: erledigt Meilenstein: v0.18.0 Labels: security, backend, ui Geschätzt: 4 h Tatsächlich: 0 h 45 min

Ziel

Passkeys (WebAuthn) als gleichwertiger Anmeldeweg neben Passwort und OIDC – passwortlos, mit Fingerabdruck, Gesicht, PIN oder Sicherheitsschlüssel.

Aufgaben

  • @simplewebauthn/server und @simplewebauthn/browser
  • Datenmodell Passkey (mehrere je Konto)
  • Registrierung und Anmeldung als Endpunkte, Aufgabe („challenge“) in einem kurzlebigen Cookie
  • Seite Meine Passkeys mit Anlegen und Entfernen
  • Knopf „Mit Passkey anmelden“ auf der Anmeldeseite
  • Hinweis, wenn die Adresse kein HTTPS hat

Entscheidungen

  • Keine Liste erlaubter Schlüssel bei der Anmeldung. Der Browser bietet selbst an, was zu dieser Seite passt. Sonst müsste die Seite vorher verraten, welche Passkeys zu einem Konto gehören – das wäre ein Weg, Konten auszuspähen.
  • Fehlermeldung bei der Anmeldung bewusst unscharf („Anmeldung mit diesem Passkey nicht möglich“). Ob es den Schlüssel gibt, geht einen Unbekannten nichts an.
  • Die Aufgabe liegt in einem SameSite=strict-Cookie mit fünf Minuten Gültigkeit, nicht in der Datenbank. Sie gilt nur für diesen Browser und diesen Versuch.
  • rpID und origin kommen aus der öffentlichen Adresse (Einstellung, sonst APP_URL, sonst Proxy-Kopfzeilen). Ein Passkey ist an die Domäne gebunden; steht dort die falsche Adresse, lehnt der Browser wortlos ab.
  • Passwort und OIDC bleiben bestehen. Ein Passkey, der im kaputten Telefon liegt, darf niemanden aussperren.

Grenze

Ein Passkey gilt nur für die Adresse, unter der er angelegt wurde. Beim Umzug von http://server:3000 auf https://proxledger.firma.de müssen alle Passkeys neu registriert werden – im Handbuch vermerkt.