feat: [74] Passkey-Flow auf native WebAuthn-JSON-Methoden umstellen #75

Merged
hobbypunk merged 1 commit from enhancement/74_native_webauthn into main 2026-09-28 14:48:31 +00:00
Owner

Löst #74.

Migration (Drop-in)

@github/webauthn-json ist deprecated – seine Funktionalität ist als JSON-Serialisierung in den WebAuthn-Standard übernommen und seit März 2025 stabil in allen relevanten Browsern. Die Kodierung ist kompatibel, der Server (webauthn-ruby from_create/from_get) merkt keinen Unterschied.

// vorher
const credential = await create({ publicKey: options })

// nachher
const publicKey = PublicKeyCredential.parseCreationOptionsFromJSON(options)
const credential = await navigator.credentials.create({ publicKey })
// Body: credential.toJSON()

Gleiches Muster für authenticate (parseRequestOptionsFromJSON + navigator.credentials.get).

Bewusst ohne Ponyfill-Fallback

Repo-Empfehlung: „not recommended" – Support ist ubiquitous, und die nativen Methoden bekommen zukünftige Felder (user-agent hints, prf-Extension), die webauthn-json nie erhalten hätte. Weniger Code auf den Login-Seiten.

Verifiziert

  • Passkey-System-Test (echter Headless-Browser + virtueller Authenticator) gegen den nativen Pfad: grün – Registrierung läuft komplett durch parseCreationOptionsFromJSON → navigator.credentials.create → toJSON()
  • Bundle neu gebaut, @github/webauthn-json aus package.json entfernt
  • Request-Level-Tests (FakeClient) unberührt – serverseitig ändert sich nichts
Löst #74. ## Migration (Drop-in) `@github/webauthn-json` ist deprecated – seine Funktionalität ist als [JSON-Serialisierung in den WebAuthn-Standard](https://github.com/w3c/webauthn/wiki/Explainer:-JSON-Serialization-Methods) übernommen und seit März 2025 stabil in allen relevanten Browsern. Die Kodierung ist **kompatibel**, der Server (webauthn-ruby `from_create`/`from_get`) merkt keinen Unterschied. ```js // vorher const credential = await create({ publicKey: options }) // nachher const publicKey = PublicKeyCredential.parseCreationOptionsFromJSON(options) const credential = await navigator.credentials.create({ publicKey }) // Body: credential.toJSON() ``` Gleiches Muster für `authenticate` (`parseRequestOptionsFromJSON` + `navigator.credentials.get`). ## Bewusst ohne Ponyfill-Fallback Repo-Empfehlung: „not recommended" – Support ist ubiquitous, und die nativen Methoden bekommen zukünftige Felder (user-agent hints, `prf`-Extension), die webauthn-json nie erhalten hätte. Weniger Code auf den Login-Seiten. ## Verifiziert - Passkey-**System-Test** (echter Headless-Browser + virtueller Authenticator) gegen den nativen Pfad: grün – Registrierung läuft komplett durch `parseCreationOptionsFromJSON` → `navigator.credentials.create` → `toJSON()` - Bundle neu gebaut, `@github/webauthn-json` aus `package.json` entfernt - Request-Level-Tests (FakeClient) unberührt – serverseitig ändert sich nichts
[74] Passkey-Flow auf native WebAuthn-JSON-Methoden umstellen
All checks were successful
PR Triage / triage (pull_request) Successful in 1m5s
CI / scan_ruby (pull_request) Successful in 2m36s
CI / lint (pull_request) Successful in 3m19s
CI / test (pull_request) Successful in 3m43s
CI / system-test (pull_request) Successful in 3m51s
CI / coverage (pull_request) Successful in 38s
c84e8e8e22
---------

Co-Authored-By: opencode (Mistral GLM) <opencode-agent[bot]@hoppe-dev.eu>
forgejo-actions changed title from [74] Passkey-Flow auf native WebAuthn-JSON-Methoden umstellen to feat: [74] Passkey-Flow auf native WebAuthn-JSON-Methoden umstellen 2026-09-28 14:41:45 +00:00

📊 Coverage

Metrik Abdeckung
Zeilen 97.69% (2619/2681)
Branches 81.46% (637/782)
Methoden 96.95% (413/426)

Patch-Coverage: keine getrackten Zeilen geändert

Schwächste Dateien im Projekt

Datei Abdeckung
app/models/concerns/has_uuid_v7.rb 54.55%
app/components/form/select.rb 72.41%
app/components/layout/flash.rb 84.0%
app/components/concerns/actionable.rb 86.67%
app/components/layout/sidebar.rb 89.47%
app/controllers/settings/security_controller.rb 90.24%
app/controllers/sessions_controller.rb 90.32%
app/components/concerns/inferrable.rb 90.63%
app/components/users/avatar.rb 91.23%
app/controllers/settings/security/otps_controller.rb 91.67%

🔍 Report im Browser ansehen · 📄 Run-Artifact „coverage-report“

<!-- coverage-report --> ## 📊 Coverage | Metrik | Abdeckung | |---|---| | Zeilen | 97.69% (2619/2681) | | Branches | 81.46% (637/782) | | Methoden | 96.95% (413/426) | **Patch-Coverage**: keine getrackten Zeilen geändert **Schwächste Dateien im Projekt** | Datei | Abdeckung | |---|---| | app/models/concerns/has_uuid_v7.rb | 54.55% | | app/components/form/select.rb | 72.41% | | app/components/layout/flash.rb | 84.0% | | app/components/concerns/actionable.rb | 86.67% | | app/components/layout/sidebar.rb | 89.47% | | app/controllers/settings/security_controller.rb | 90.24% | | app/controllers/sessions_controller.rb | 90.32% | | app/components/concerns/inferrable.rb | 90.63% | | app/components/users/avatar.rb | 91.23% | | app/controllers/settings/security/otps_controller.rb | 91.67% | [🔍 Report im Browser ansehen](https://pages.hoppe-dev.eu/hobbypunk/rails-base_app/pr-75/coverage) · [📄 Run-Artifact „coverage-report“](https://code.hoppe-dev.eu/hobbypunk/rails-base_app/actions/runs/1765/artifacts/coverage-report)
hobbypunk deleted branch enhancement/74_native_webauthn 2026-09-28 14:48:31 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
hobbypunk/rails-base_app!75
No description provided.