Saltar para o conteúdo
A integrar com assistente de IA? Copia a especificação oficial da KambaSMS em Markdown.
llms.txt
Navegar na documentação
Kamba Authenticator

Guia de integração 2FA

Inscrição SMS ou TOTP, verificação, provas de uso único e recuperação de acesso na mesma API. A tua aplicação continua a gerir o login principal e as sessões.

Antes de integrar

  • Usa uma chave autorizada com scope authenticator no backend do teu sistema.
  • Testa primeiro na Sandbox: o código 123456 não envia SMS nem desconta saldo.
  • A aceitação do SMS pelo fornecedor não comprova entrega nem autenticação. A autenticação exige verificar o código e consumir a prova na tua aplicação.
  • Em live, cada SMS segue a reserva e o débito de créditos. Gerar ou verificar códigos de recuperação não envia SMS.
  • Contextos devem ser aleatórios e ligados à operação do utilizador. Não uses exemplos fixos em produção.
  • Após recuperação, revoga as sessões no teu sistema e gera novos códigos. TOTP e recuperação assistida não estão disponíveis.
Registar o fator SMS
curl -X POST 'https://api.kambasms.ao/authenticator/v1/applications/APPLICATION_UUID/subjects/SUBJECT_UUID/enrollments' \
  -H 'X-API-Key: YOUR_SERVER_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "phone": "+2449XXXXXXXX",
  "context_id": "RANDOM_CONTEXT_AT_LEAST_32_CHARACTERS"
}'

Exemplo parcial para o servidor. UUIDs, chave e contexto são placeholders; completa o fluxo no guia abaixo.

Experimenta uma integração completa

Uma aplicação local em Node.js demonstra inscrição, segundo fator, códigos de recuperação e troca do número. A chave e as provas ficam no servidor; usa apenas a Sandbox.

  1. 1. Descarrega e extrai o exemplo. Requer Node.js 22 ou superior; sem npm install.
  2. 2. Copia .env.example para .env.local e configura a chave Sandbox e a palavra-passe de demonstração.
  3. 3. Executa o comando e abre http://127.0.0.1:3080. Segue o README incluído.
node --env-file=.env.local server.cjs
Descarregar exemplo

Referência local de integração. O login e as sessões em memória são de demonstração; adapta-os ao teu sistema antes de usar em produção.

Kamba Authenticator / TOTP

Segundo fator com uma aplicação autenticadora.

SMS e TOTP no mesmo serviço. TOTP usa códigos de 6 dígitos que mudam a cada 30 segundos e não consome créditos SMS. Configura o relógio do telemóvel automaticamente.

  1. 1. Registar TOTP

    POST /totp/enrollments

    Envia context_id aleatório (32–200 caracteres). Apresenta qr_data_url ao utilizador autenticado. A URI e o QR contêm o segredo: não os guardes em logs, analytics ou caches.

  2. 2. Confirmar ativação

    POST /totp/enrollments/:id/confirm

    Envia code (6 dígitos) e o mesmo context_id. Só ativa após confirmação. Guarda factor_id, sem guardar o segredo no teu cliente.

  3. 3. Iniciar segundo fator

    POST /totp/challenges

    Após o login principal, envia factor_id, novo context_id e purpose: login. Nenhum SMS é enviado.

  4. 4. Validar código

    POST /totp/challenges/:id/check

    Envia code e mesmo contexto. Recebe proof temporária; ainda não cria uma sessão.

  5. 5. Concluir no servidor

    POST /proofs/consume

    Envia proof e mesmo contexto. Só autoriza depois de authorized: true. Mantém o login principal e as sessões no teu sistema.

Prefixo: /authenticator/v1/applications/:app/subjects/:subject. Todas as chamadas usam X-API-Key no servidor. A chave API nunca vai para o navegador.

Adicionar TOTP quando já existe um fator exige proof de login fresca e o mesmo contexto. Para substituir um TOTP perdido: /recovery/check, depois /totp/enrollments com recovery: true, proof e o mesmo contexto. O antigo permanece ativo até confirmares o novo. Depois revoga sessões e gera novos códigos de recuperação.

Códigos de recuperação: inicia /totp/challenges com purpose: recovery_codes, valida e envia a proof para /recovery-codes. As provas são separadas por finalidade. Cancelar: /totp/challenges/:id/cancel com context_id.

Desafio: 5 minutos, até 5 tentativas; prova: 2 minutos e uso único. Cada código TOTP aceite só pode ser usado uma vez; aguarda o próximo código para uma nova operação. A tolerância de relógio é de um intervalo antes/depois.

API / 2FA

Sequência de endpoints

Quatro percursos, do primeiro fator SMS à recuperação. Segue os passos pela ordem indicada.

01

Preparar e ativar

Confirma a posse do número antes de criar o fator ativo.

  1. 1

    Cria a aplicação

    POST/applications

    Envia name e guarda application_id.

  2. 2

    Regista o utilizador

    POST/applications/:app/subjects

    Envia external_subject_id opaco; guarda subject_id.

  3. 3

    Envia a confirmação SMS

    POST/enrollments

    Envia phone e context_id aleatório; guarda enrollment_id.

  4. 4

    Ativa o fator

    POST/enrollments/:id/confirm

    Envia code e o mesmo context_id; guarda factor_id.

Fator SMS ativo

02

Verificar o segundo fator

Começa após o login principal no teu sistema.

  1. 1

    Inicia o desafio

    POST/challenges

    Envia factor_id e novo context_id.

  2. 2

    Valida o código

    POST/challenges/:id/check

    Envia code e o mesmo contexto; recebe proof temporária.

  3. 3

    Consome a prova

    POST/proofs/consume

    Envia proof e context_id no servidor. Só cria sessão após authorized: true.

Prova consumida uma única vez

03

Guardar códigos de recuperação

Exige uma nova confirmação do fator SMS ativo.

  1. 1

    Pede confirmação dedicada

    POST/challenges

    Envia factor_id, context_id e purpose: recovery_codes.

  2. 2

    Confirma a operação

    POST/challenges/:id/check

    Envia code, mesmo contexto e purpose: recovery_codes.

  3. 3

    Gera e guarda o lote

    POST/recovery-codes

    Envia proof e mesmo contexto. Guarda os dez códigos: apresentados uma vez; regenerar invalida os antigos.

Dez códigos de uso único

04

Recuperar e trocar o número

O número antigo permanece ativo até confirmares o novo.

  1. 1

    Usa um código guardado

    POST/recovery/check

    Envia code e novo context_id. A proof recovery não permite login.

  2. 2

    Regista o novo destino

    POST/recovery/replacement

    Envia proof, phone e mesmo context_id; recebe enrollment_id.

  3. 3

    Conclui a troca

    POST/enrollments/:id/confirm

    Confirma o SMS do novo destino. Revoga as sessões no teu sistema e gera novo lote de recuperação.

Novo fator ativo; provas antigas invalidadas