[low priority] Passkey (WebAuthn) authentication for the dashboard, alongside master-key login #24
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Add passkey (WebAuthn/FIDO2) login to the admin dashboard as step 2 of the dashboard-auth work started in #22. This is additive: the master-API-key login stays, and passkeys become a stronger/more convenient way to establish the same session.
Context
#22 replaced the browser-stored master key with a server-issued, httpOnly session cookie (
SessionStore,POST /api/sessionlogin → cookie,auth_middlewareaccepts the cookie). Passkeys slot in cleanly on top of that: a successful WebAuthn assertion just mints the sameer_sessioncookie — no change to how the rest of the app authenticates. #23 (output escaping + CSP) is already done.Model / decisions from discussion
router.example.com,router.localhostin devinfra). Credentials are domain-bound, so multi-admin-host setups need per-host handling — worth noting since ER supports multiple[[admin]]hosts.db.rsregistration per the migration rules in CLAUDE.md.Scope
er_sessionon success.webauthn_credentialstable; CRUD indb.rs.Dependencies / ordering
Priority
Low — the dashboard is already session-authenticated and XSS/CSP-hardened; passkeys are a UX + second-factor improvement, not a security gap. Tracked as the deferred "step 2" from #22.