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
Kein Credential aus allowCredentials auf diesem Authenticator
häufigDer Passkey des Kontos liegt auf einem anderen Gerät, wurde gelöscht oder unter einer anderen RP-ID registriert. Der Browser wartet bis zum Timeout auf einen passenden Authenticator und meldet dann NotAllowedError.
Der Nutzer hat den Dialog geschlossen oder das Timeout ist abgelaufen
häufigDas Schließen des Passkey-Dialogs im Browser, zu viele fehlgeschlagene biometrische Prüfungen oder ein kurzes `timeout` bei einem langsamen Ablauf mit Sicherheitsschlüssel enden alle gleich.
Ohne Nutzergeste oder aus einer verborgenen Seite aufgerufen
gelegentlichVor allem Safari verlangt, dass `create()`/`get()` als Antwort auf einen Klick laufen; Aufrufe nach einem `await` auf eine langsame Netzwerkanfrage können die Aktivierung verlieren. Hintergrund-Tabs und Cross-Origin-iframes ohne die Berechtigungen `publickey-credentials-*` scheitern ebenfalls.
Kein unterstützter Algorithmus in pubKeyCredParams
gelegentlichUnterstützt der Authenticator keinen der COSE-Algorithmen, die du aufführst, scheitert die Registrierung mit NotAllowedError statt mit einem spezifischen Fehler.
So behebst du den Fehler
- 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.
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
SecurityError: The relying party ID is not a registrable domain suffix of, nor…WebAuthn navigator.credentials.create() / get()InvalidStateError: The user attempted to register an authenticator that contain…WebAuthn navigator.credentials.create() with excludeCredentialsUnexpected registration response origin "http://localhost:3000", expected "http…SimpleWebAuthn (@simplewebauthn/server)