WebAuthn SolverWebAuthn SolverInstalar
Extensão para Chrome, Edge, Brave e Firefox

O passkey do WhatsApp Web, resolvido no navegador.

O WebAuthn Solver executa o desafio de passkey (WebAuthn) do WhatsApp Web direto no navegador do seu cliente — onde o celular dele está por perto — e devolve a assertion pronta para o seu sistema.

Sem permissão ampla (<all_urls>). A chave privada nunca sai do dispositivo.

seu-app.js
import "https://app.z-api.io/webauthn-sdk.js";

// desafio que o WhatsApp devolveu
const disponivel = await ZapiWebAuthn.isAvailable();

const assertion = await ZapiWebAuthn.solve(publicKey);

// envie a assertion ao seu backend → WhatsApp

O problema

A passkey não roda num servidor

Ao conectar uma sessão do WhatsApp Web, o protocolo pode devolver um desafio WebAuthn. Responder a ele tem três exigências que impedem rodar em backend ou numa página comum:

A chave está no celular

A passkey (chave privada) fica no dispositivo do cliente. Ninguém consegue extraí-la — só o próprio aparelho assina.

Precisa de proximidade

O fluxo “usar telefone” (hybrid/caBLE) exige Bluetooth de proximidade: quem roda o get() precisa estar perto do celular que aprova.

Só na origin certa

rpId whatsapp.com só funciona rodando em web.whatsapp.com, que não pode ser embutido em iframe (CSP frame-ancestors).

Conclusão: só uma extensão consegue injetar no web.whatsapp.com e ainda falar com o seu servidor. É exatamente o que o WebAuthn Solver faz.

Como funciona

SDK → connector → extensão

Qualquer domínio de cliente usa a extensão através de um SDK hospedado no seu domínio — sem a extensão precisar de permissão ampla.

01

Seu app chama o SDK

A página do cliente inclui o webauthn-sdk.js (hospedado no seu domínio) e chama ZapiWebAuthn.solve(publicKey) com o desafio.

02

A extensão abre o WhatsApp

Um iframe-ponte no seu domínio aciona a extensão, que abre/foca a aba do web.whatsapp.com e executa navigator.credentials.get() na origin correta.

03

O cliente aprova e recebe a assertion

A UI nativa de passkey aparece, o cliente aprova no celular (proximidade BLE) e a assertion volta para a sua página — pronta para enviar ao WhatsApp.

A chave nunca sai do celular. A extensão só recebe o desafio, pede a assinatura e devolve a assertion — nunca a chave.

Recursos

Feito para onboarding seguro

Chave nunca é exposta

A extensão não acessa a chave privada. Ela só recebe a assertion (assinatura + dados) depois da aprovação do usuário.

Permissões específicas

Sem <all_urls>. Só web.whatsapp.com e o seu domínio (app.z-api.io) — revisão mais tranquila nas lojas.

Nada é armazenado

Sem storage, cookies ou analytics. O desafio e a assertion existem apenas em memória, durante a operação.

Gerencia a aba sozinha

Abre o web.whatsapp.com se não estiver aberto, espera carregar, captura a assertion, fecha a aba e devolve o foco à origem.

Integra em qualquer domínio

Um SDK leve e um iframe-ponte deixam qualquer página do cliente acionar a extensão, sem instalar nada além dela.

Chromium e Firefox

Publicada como Manifest V3 para Chrome, Edge e Brave, e com build assinado para o Firefox.

Privacidade por design

A extensão não coleta, não armazena e não transmite dados pessoais a servidores próprios. Todo o tráfego ocorre apenas entre a sua página, o navegador e o web.whatsapp.com.

  • A chave privada permanece no dispositivo
  • Nenhum dado enviado ao desenvolvedor
  • Sem storage, cookies ou analytics
  • Permissões mínimas e específicas
Ler a política de privacidade

Pronto para resolver o passkey?

Instale a extensão e conclua a etapa de passkey do WhatsApp no dispositivo do próprio usuário.