Pular para o conteúdo
ecdsa.com
WebAuthn navigator.credentials.get() / create()WebAuthn e chaves de acesso

Mensagem de erro

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

Também aparece como

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

O texto acima é o do Chromium (versões mais antigas omitem o link “See: …”). O Firefox diz “CredentialsContainer request is not allowed.” (reproduzido no Firefox 157 headless, que não tem autenticador). A mensagem varia de navegador para navegador; só `e.name` é estável.

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

O que significa

A falha genérica do WebAuthn no navegador. A especificação torna, de propósito, indistinguíveis para a página web os casos “o usuário cancelou”, “o tempo limite expirou”, “nenhum autenticador tem uma credencial correspondente” e “a requisição não foi permitida neste contexto”, para que um site não consiga sondar quais credenciais existem em um dispositivo (a seção sobre privacidade indicada no link explica o motivo). Por isso, seu código precisa tratar o erro como “nenhuma credencial foi produzida” e oferecer outro caminho; a causa real se descobre reproduzindo o problema, não lendo o erro.

Por que acontece

Como corrigir

  1. 1.

    Tratar como “nenhuma credencial” e oferecer alternativas

    Não mostre um erro assustador. Ofereça outro método de login, outro dispositivo (fluxo híbrido/QR) ou o registro de uma nova chave de acesso.

    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.

    Oferecer algoritmos comuns no registro

    Listar ES256, EdDSA e RS256 cobre praticamente todos os autenticadores; nesse caso, seu servidor precisa verificar os três.

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

Erros relacionados

Ver toda a base de erros de assinatura