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>
1.8 KiB
1.8 KiB
#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/serverund@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. rpIDundoriginkommen aus der öffentlichen Adresse (Einstellung, sonstAPP_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.