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

Fehlermeldung

NotAllowedError: The operation either timed out or was not allowed. See: https://www.w3.org/TR/webauthn-2/#sctn-privacy-considerations-client.

Auch ausgegeben als

  • NotAllowedError: The operation either timed out or was not allowed.
  • NotAllowedError: CredentialsContainer request is not allowed.

Oben steht der Text von Chromium (ältere Versionen lassen den Link „See: …“ weg). Firefox meldet „CredentialsContainer request is not allowed.“ (reproduziert im Headless-Firefox 157, der keinen Authenticator hat). Die Meldung unterscheidet sich je nach Browser; nur `e.name` ist stabil.

WebAuthn navigator.credentials.get() / create() — DOMException NotAllowedError (Chromium; Firefox wording in aliases)

Was der Fehler bedeutet

Der Sammelfehler des Browsers für WebAuthn. Die Spezifikation macht „der Nutzer hat abgebrochen“, „das Timeout ist abgelaufen“, „kein Authenticator hat ein passendes Credential“ und „die Anfrage war in diesem Kontext nicht erlaubt“ für die Webseite absichtlich ununterscheidbar, damit eine Website nicht ausloten kann, welche Credentials auf einem Gerät existieren (der verlinkte Abschnitt zum Datenschutz erklärt, warum). Dein Code muss den Fehler deshalb als „es wurde kein Credential erzeugt“ behandeln und einen anderen Weg anbieten; die tatsächliche Ursache findest du durch Reproduzieren, nicht durch Lesen der Fehlermeldung.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Als „kein Credential“ behandeln und Alternativen anbieten

    Zeig keine beängstigende Fehlermeldung an. Biete eine andere Anmeldemethode, ein anderes Gerät (Hybrid-/QR-Ablauf) oder die Registrierung eines neuen Passkeys an.

    js
    try {
      const credential = await navigator.credentials.get({ publicKey: options });
      await finishLogin(credential);
    } catch (e) {
      if (e.name === "NotAllowedError") {
        // Cancelled, timed out, or no passkey for this account on this device: offer alternatives.
        showOtherSignInOptions();
      } else {
        throw e;
      }
    }
  2. 2.

    Bei der Registrierung gängige Algorithmen anbieten

    Wenn du ES256, EdDSA und RS256 aufführst, deckst du praktisch alle Authenticators ab; dein Server muss dann alle drei prüfen.

    js
    // Registration: offer the algorithms authenticators actually support.
    pubKeyCredParams: [
      { type: "public-key", alg: -7 },    // ES256
      { type: "public-key", alg: -8 },    // EdDSA (Ed25519)
      { type: "public-key", alg: -257 },  // RS256 (Windows Hello and older security keys)
    ],

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen