Autenticação avançada
Formas de entrar e recuperar acesso além de e-mail e senha: código, passkey, CNPJ, convite de contador.
O login com e-mail e senha, o cadastro e a renovação de sessão estão em Autenticação. Esta seção reúne o que vem além disso: entrar com um código de uso único, entrar com biometria (passkey), recuperar a senha de uma conta B2B pelo CNPJ, convidar um contador e deixar um cliente importado assumir o próprio cadastro.
Todas as rotas desta seção ficam sob /api/v1/auth/, funcionam no host da loja (a loja é identificada pelo domínio, veja Multi-loja) e devolvem erros no formato {"error": "...", "detail": "..."} descrito em Erros.
Como escolher
| Quero... | Use |
|---|---|
| Entrar sem senha, por e-mail, SMS ou WhatsApp | Login por código |
| Entrar com Face ID, digital ou chave física | Login com passkey |
| Cadastrar passkey ou pedir biometria antes de uma ação sensível | Cadastrar passkey e step-up |
| Ver ou apagar passkeys | Listar e remover passkeys |
| Recuperar a senha de conta empresarial por CNPJ | Recuperação B2B |
| Criar o acesso de um contador | Convite de contador |
| Reaproveitar cadastro importado de outra plataforma | Adoção por CNPJ |
Conceitos principais
Código de uso único (OTP)
Um OTP (one-time password) é um número de 6 dígitos, entregue ao e-mail, telefone ou WhatsApp do cliente, que vale por pouco tempo e para uma finalidade. A loja define a espera entre reenvios e o número máximo de tentativas.
Passkey e WebAuthn
WebAuthn é o padrão dos navegadores para autenticar com chaves criptográficas protegidas por biometria. A chave privada nunca sai do aparelho; a plataforma guarda só a chave pública. Cada passkey é presa ao domínio da loja.
Cerimônia
Nos fluxos de passkey, cada tentativa é uma cerimônia com um ceremony_id, criada no begin e consumida no finish. Vale 5 minutos e uma única vez.
Anti-enumeração
Rotas públicas que aceitam um identificador (e-mail, CNPJ, telefone) respondem igual para contas que existem e que não existem. Se o seu sistema precisa saber se um cliente existe, use as rotas administrativas, com token.
Endpoints
| Método | Rota | Para quê | Autenticação |
|---|---|---|---|
| POST | /api/v1/auth/otp-login/request | Pede um código de login por e-mail, SMS ou WhatsApp. | Pública |
| POST | /api/v1/auth/otp-login/verify | Troca o código por tokens. | Pública |
| POST | /api/v1/auth/webauthn/login/begin | Inicia o login com passkey. | Pública |
| POST | /api/v1/auth/webauthn/login/finish | Conclui o login com passkey. | Pública |
| POST | /api/v1/auth/webauthn/register/begin | Inicia o cadastro da passkey. | Token |
| POST | /api/v1/auth/webauthn/register/finish | Conclui o cadastro da passkey. | Token |
| POST | /api/v1/auth/webauthn/stepup/begin | Inicia a confirmação por biometria. | Token |
| POST | /api/v1/auth/webauthn/stepup/finish | Emite o token de step-up. | Token |
| GET | /api/v1/auth/webauthn/credentials | Lista as passkeys do usuário. | Token |
| DELETE | /api/v1/auth/webauthn/credentials/{id} | Remove uma passkey. | Token |
| GET | /api/v1/auth/b2b-recovery/status | Canais de recuperação ligados na loja. | Pública |
| POST | /api/v1/auth/b2b-recovery/lookup | Identifica a conta por CNPJ, e-mail ou telefone. | Pública |
| POST | /api/v1/auth/b2b-recovery/send | Envia o código de recuperação. | Pública |
| POST | /api/v1/auth/b2b-recovery/validate | Valida o código e devolve o reset_token. | Pública |
| POST | /api/v1/auth/accountant-invites/{token}/accept | Aceita o convite e cria o contador. | Pública (token do convite) |
| POST | /api/v1/auth/cnpj-adoption/otp/request | Envia o código de adoção ao e-mail antigo. | Pública |
Erros comuns
- Tratar
200deotp-login/requestou deb2b-recovery/sendcomo "o código foi entregue". Significa só que o pedido foi aceito. - Chamar essas rotas de um servidor próprio para muitos clientes: o limite é por IP, então todos os seus clientes dividem a mesma cota. Faça as chamadas do navegador ou do app do cliente.
- Reutilizar um
ceremony_idou deixá-lo passar de 5 minutos. - Guardar o
reset_tokendob2b-recovery/validateem log ou na URL. - Usar uma passkey em outra loja ou domínio: ela só vale onde foi cadastrada.
- Esquecer o cabeçalho
X-Recaptcha-Tokenem lojas que usam reCAPTCHA (errocaptcha_required).