Saltar al contenido
ecdsa.com
WebAuthn navigator.credentials.get() / create()WebAuthn y llaves de acceso

Mensaje de error

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

También se muestra como

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

Arriba está el texto de Chromium (las versiones antiguas omiten el enlace «See: …»). Firefox dice «CredentialsContainer request is not allowed.» (reproducido en Firefox 157 en modo headless, que no tiene autenticador). El mensaje cambia según el navegador; solo `e.name` es estable.

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

Qué significa

El fallo genérico de WebAuthn del navegador, que lo engloba todo. La especificación hace deliberadamente que «el usuario canceló», «se agotó el tiempo de espera», «ningún autenticador tiene una credencial que coincida» y «la solicitud no estaba permitida en este contexto» sean indistinguibles para la página web, de modo que un sitio no pueda sondear qué credenciales existen en un dispositivo (la sección de privacidad enlazada explica por qué). Por eso tu código tiene que tratarlo como «no se produjo ninguna credencial» y ofrecer otra vía; la causa real se encuentra reproduciéndolo, no leyendo el error.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Tratarlo como «sin credencial» y ofrecer alternativas

    No muestres un error alarmante. Ofrece otro método de inicio de sesión, otro dispositivo (flujo híbrido/QR) o el registro de una nueva llave de acceso.

    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.

    Ofrecer algoritmos comunes en el registro

    Enumerar ES256, EdDSA y RS256 cubre prácticamente todos los autenticadores; después, tu servidor debe verificar los tres.

    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)
    ],

Errores relacionados

Explorar toda la base de datos de errores de firma