authentik: Passkey-Autofill — Login ohne Username-Tippen #118

Merged
k.renner merged 1 commits from feat/authentik-passkey-autofill into master 2026-07-07 08:16:54 +00:00
Owner

Was

Folge-PR zu #115: setzt webauthn_stage auf der Identification-Stage des Passwordless-Flows. Damit bietet der Browser enrollte Passkeys direkt im Autofill des Username-Felds an (Conditional WebAuthn / Passkey-Autofill, seit authentik 2025.12; wir laufen 2026.5.3 — Spalte webauthn_stage_id live verifiziert): ein Tap auf den vorgeschlagenen Passkey, kein Username, kein Passwort.

Verhalten

  • Mit discoverable Passkey (Google Password Manager immer; Yubikeys je nach Enrollment): Login-Seite → Passkey aus dem Autofill antippen → drin.
  • Ohne discoverable Credential: Username tippen → regulärer WebAuthn-Prompt (Stage bei Order 20) — unverändertes Fallback, kein Lockout-Risiko.

Details

  • last_auth_threshold der Passwordless-Validation-Stage: seconds=0 → minutes=5. Ohne das würde die bei Order 20 gebundene Stage direkt nach der Autofill-Validierung ein zweites Mal challengen. Der Threshold-Skip ist session-gebunden (Authentik speichert die letzte Validierung in der Session), eine fremde/frische Session erbt ihn nicht.
  • Validation-Stage-Entry im Blueprint vor den Identification-Entry gezogen — !KeyOf löst nur bereits verarbeitete Entries auf.
  • Enrollment-Stage (default-authenticator-webauthn-setup) steht live auf resident_key_requirement: preferred — GPM-Passkeys sind immer discoverable, neue Yubikey-Enrollments werden es bei gesetzter PIN.

Validierung nach Merge

  1. Worker-Log / DB: webauthn_stage_id auf der Stage passkey-passwordless-identification gesetzt
  2. NetBird/HA-Login: Username-Feld schlägt Passkey vor (Browser mit Conditional-Mediation-Support, z.B. Chrome/Android)
  3. Fallback: Username eintippen funktioniert weiterhin

🤖 Generated with Claude Code

## Was Folge-PR zu #115: setzt `webauthn_stage` auf der Identification-Stage des Passwordless-Flows. Damit bietet der Browser enrollte Passkeys **direkt im Autofill des Username-Felds** an (Conditional WebAuthn / Passkey-Autofill, seit authentik 2025.12; wir laufen 2026.5.3 — Spalte `webauthn_stage_id` live verifiziert): ein Tap auf den vorgeschlagenen Passkey, kein Username, kein Passwort. ## Verhalten - **Mit discoverable Passkey** (Google Password Manager immer; Yubikeys je nach Enrollment): Login-Seite → Passkey aus dem Autofill antippen → drin. - **Ohne discoverable Credential**: Username tippen → regulärer WebAuthn-Prompt (Stage bei Order 20) — unverändertes Fallback, kein Lockout-Risiko. ## Details - `last_auth_threshold` der Passwordless-Validation-Stage: `seconds=0` → `minutes=5`. Ohne das würde die bei Order 20 gebundene Stage direkt nach der Autofill-Validierung ein zweites Mal challengen. Der Threshold-Skip ist **session-gebunden** (Authentik speichert die letzte Validierung in der Session), eine fremde/frische Session erbt ihn nicht. - Validation-Stage-Entry im Blueprint vor den Identification-Entry gezogen — `!KeyOf` löst nur bereits verarbeitete Entries auf. - Enrollment-Stage (`default-authenticator-webauthn-setup`) steht live auf `resident_key_requirement: preferred` — GPM-Passkeys sind immer discoverable, neue Yubikey-Enrollments werden es bei gesetzter PIN. ## Validierung nach Merge 1. Worker-Log / DB: `webauthn_stage_id` auf der Stage `passkey-passwordless-identification` gesetzt 2. NetBird/HA-Login: Username-Feld schlägt Passkey vor (Browser mit Conditional-Mediation-Support, z.B. Chrome/Android) 3. Fallback: Username eintippen funktioniert weiterhin 🤖 Generated with [Claude Code](https://claude.com/claude-code)
k.renner added 1 commit 2026-07-07 08:02:53 +00:00
Setzt webauthn_stage auf der Identification-Stage des Passwordless-
Flows (Conditional WebAuthn, authentik >= 2025.12): der Browser bietet
enrollte Passkeys direkt im Autofill des Username-Felds an — ein Tap,
kein Username. Username-Tippen bleibt als Fallback für nicht-
discoverable Credentials erhalten.

last_auth_threshold der Passwordless-Validation-Stage von seconds=0
auf minutes=5: verhindert Doppel-Challenge derselben Flow-Ausführung
nach Autofill-Validierung; der Skip ist session-gebunden.

Validation-Stage-Entry vor den Identification-Entry gezogen, weil
!KeyOf nur rückwärts auflöst.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
k.renner merged commit 5698990a78 into master 2026-07-07 08:16:54 +00:00
Sign in to join this conversation.