Ajude os usuários a adotar chaves de acesso com mais facilidade

Publicado em 9 de maio de 2025

As chaves de acesso oferecem uma autenticação forte e resistente a phishing. No entanto, fazer com que os usuários adotem essas tecnologias pode causar atrito. Com os upgrades de chave de acesso, é possível criar chaves de acesso para seus usuários no momento certo, desde que eles já tenham uma senha salva para seu site. A criação condicional, que permite upgrades de chaves de acesso, faz parte da especificação da WebAuthn.

Como funciona

Para ajudar os usuários a adotar chaves de acesso de maneira mais conveniente, use um recurso da API WebAuthn chamado Criação condicional. A criação condicional permite que seu site solicite uma chave de acesso para o usuário sem exigir nenhuma ação dele.

Esse fluxo funciona quando as seguintes condições são atendidas:

  • O usuário tem uma senha salva no gerenciador de senhas padrão.
  • A senha foi usada recentemente. Chame a criação condicional imediatamente após um login com senha.

Se ambas as condições forem atendidas, você poderá solicitar que o gerenciador de senhas crie uma chave de acesso para o usuário chamando a criação condicional. Depois de criar a chave de acesso, o usuário vai receber uma notificação, dependendo do gerenciador de senhas.

Fluxo de solicitação de chave de acesso com criação condicional.

Compatibilidade

A criação condicional é compatível com o Safari no macOS e no iOS, bem como com o Chrome no computador.

Implementar a criação condicional

Os upgrades de chave de acesso são baseados em um recurso da API WebAuthn chamado Criação condicionada. Essas são solicitações create() regulares da WebAuthn com o parâmetro mediation definido como "conditional", que funciona de maneira semelhante ao preenchimento automático de chave de acesso para solicitações get().

Use a criação condicional depois que o usuário fizer login com uma senha. O sucesso do upgrade depende do gerenciador de senhas e de algumas condições sendo atendidas. Essas condições podem variar de acordo com o gerenciador de senhas e podem mudar com o tempo. Por exemplo, no Chrome com o Gerenciador de senhas do Google (GPM), o usuário precisa ter feito login recentemente usando uma senha salva para o site.

Se o navegador criar a chave de acesso, ele vai retornar uma credencial de chave pública. Envie essa credencial para seu back-end para concluir o registro e permitir a autenticação futura.

Detecção de recursos

Para determinar se a criação condicional está disponível no navegador, invoque PublicKeyCredential.getClientCapabilities(). Verifique se um objeto retornado contém true para a propriedade conditionalCreate.

if (window.PublicKeyCredential && PublicKeyCredential.getClientCapabilities) {
  const capabilities = await PublicKeyCredential.getClientCapabilities();
  if (capabilities.conditionalCreate) {
    // Conditional create is available
  }
}

Se getClientCapabilities estiver indisponível, a criação condicional também ficará indisponível.

Criar uma chave de acesso condicionalmente

Para fazer upgrade de uma chave de acesso, invoque navigator.credentials.create(), mas com mediation: "conditional" desta forma.

const cred = await navigator.credentials.create({
  publicKey: options,
  // Request conditional creation
  mediation: 'conditional'
});

Use o upgrade de chave de acesso imediatamente após o usuário fazer login para ter a melhor chance de atender aos critérios do gerenciador de senhas para criação automática.

É possível enviar a credencial de chave pública resultante ao servidor para verificar e registrar a chave de acesso. No servidor, verifique se o usuário fez login.

Advertências

A criação condicional não é difícil de implementar, mas há várias ressalvas ao integrar esse recurso a um sistema existente.

Ignorar a presença e a verificação do usuário no servidor

A resposta de registro retorna "Presença do usuário" e "Usuário verificado" como false. Portanto, o servidor precisa ignorar essas flags durante a verificação de credenciais.

Abortar a chamada da WebAuthn em andamento antes de fazer upgrade da chave de acesso

Quando o RP espera que o usuário faça login com uma chave de acesso ou uma senha, a melhor escolha é fazer uma busca condicional. Isso pode fazer com que a chamada de recebimento condicional seja cancelada antes de realizar uma criação condicional.

Para fazer isso, use AbortController e chame .abort().

// To abort a WebAuthn call, instantiate an AbortController.
const controller = new AbortController();

const cred = await navigator.credentials.get({
  publicKey: options,
  signal: controller.signal,
  // Request conditional get
  mediation: 'conditional'
});

// Abort the call
controller.abort();

Ignorar as exceções de forma adequada

Quando uma criação de chave de acesso condicional é realizada, há alguns casos em que é necessário ignorar exceções:

  • InvalidStateError: uma chave de acesso já existe no provedor.
  • NotAllowedError: a criação de uma chave de acesso não atende à condição.
  • AbortError: a chamada do WebAuthn é abortada.

A exibição de erros nesses casos pode confundir o usuário, já que o navegador os processa silenciosamente: ele mostra uma notificação apenas em caso de sucesso, e as falhas não acionam mensagens visíveis.

Sinal quando o registro de uma chave de acesso falha

Quando uma chave de acesso é criada, mas não é registrada no servidor, o usuário não consegue fazer login. Isso pode acontecer quando a lista de chaves de acesso é inconsistente entre o provedor e o servidor.

Para evitar essas circunstâncias, use a API Signal para manter a consistência.

Não é possível fazer upgrade de logins sem senha

Nesse ponto, a criação de uma chave de acesso condicionalmente é bloqueada pelo usuário digitando uma senha válida. Isso significa que as abordagens de login sem senha, como links mágicos, verificação de número de telefone ou federação de identidade, não atendem à condição.

Resumo

Os upgrades de chaves de acesso podem acelerar a adoção de chaves de acesso no seu site, ajudando os usuários a fazer a transição de senhas para um método de autenticação mais seguro.

Para saber mais sobre chaves de acesso, consulte Fazer login sem senha com chaves de acesso.