Zum Inhalt springen
ecdsa.com
WebAuthn navigator.credentials.create() / get()WebAuthn und Passkeys

Fehlermeldung

SecurityError: The relying party ID is not a registrable domain suffix of, nor equal to the current domain. Subsequently, an attempt to fetch the .well-known/webauthn resource of the claimed RP ID failed.

Auch ausgegeben als

  • SecurityError: The relying party ID is not a registrable domain suffix of, nor equal to the current domain.

Chromium-Versionen ohne Unterstützung für Related Origin Requests beenden den Satz nach „…nor equal to the current domain.“. Andere Browser formulieren es anders; der DOMException-Name `SecurityError` ist der stabile Teil.

WebAuthn navigator.credentials.create() / get() — DOMException SecurityError (Chromium)

Was der Fehler bedeutet

Die RP-ID in deinen Optionen ist weder der Hostname der Seite selbst noch eine registrierbare übergeordnete Domain davon, deshalb hat der Browser es abgelehnt, dafür ein Credential zu erstellen oder zu verwenden. Ein Passkey ist an seine RP-ID gebunden; dürfte jede Seite jede beliebige RP-ID beanspruchen, könnte eine Website die Passkeys einer anderen verwenden. Chromium hat außerdem den WebAuthn-Mechanismus Related Origin Requests versucht (Abruf von `https://<rp-id>/.well-known/webauthn`, um zu sehen, ob die RP-ID deinen Origin aufführt), und auch dieser hat die Anfrage nicht autorisiert.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    RP-ID pro Umgebung konfigurieren

    Halte RP-ID und erwarteten Origin gemeinsam in der Umgebungskonfiguration, damit Entwicklung, Preview und Produktion jeweils ihren eigenen Host verwenden – und denk daran, dass Passkeys nicht zwischen RP-IDs umziehen.

    js
    // Server: derive the RP ID from configuration per environment, never hard-code production.
    const rpID = process.env.WEBAUTHN_RP_ID;          // "localhost" in dev, "example.com" in production
    const expectedOrigin = process.env.WEBAUTHN_ORIGIN; // "http://localhost:3000" / "https://app.example.com"
    const options = await generateRegistrationOptions({ rpName: "Example", rpID, userName });
  2. 2.

    Related Origins bewusst veröffentlichen

    Müssen mehrere deiner Domains Passkeys gemeinsam nutzen, liefere auf der Domain der RP-ID die Datei `/.well-known/webauthn` aus, in der diese Domains aufgeführt sind (unterstützt von aktuellen Versionen von Chromium und Safari).

    json
    // https://example.com/.well-known/webauthn  (served as application/json)
    {
      "origins": ["https://example.co.uk", "https://example-shop.com"]
    }

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen