v2.0

Integrações

O modelo de segurança por trás da API externa: como as credenciais são guardadas, como a autorização é resolvida sem expor tokens internos, e o que limita o estrago de uma credencial vazada.

Duas credenciais, dois propósitos

Toda chamada à API externa combina duas credenciais com papéis diferentes, e essa separação é a base do modelo de segurança:

Nenhuma chamada funciona com só uma das duas. Isso significa que vazar uma chave de processo sozinha não é suficiente para agir em nome de uma conta, e vazar uma credencial de conta sozinha não dá acesso a nenhum processo. É preciso as duas ao mesmo tempo, e cada uma pode ser revogada independentemente sem afetar a outra.

Por que não é só uma credencial Se existisse uma única credencial fazendo os dois papéis, revogar o acesso de um processo específico exigiria trocar a credencial inteira. Derrubando todas as outras integrações daquela conta junto. Com os dois níveis separados, cada revogação tem o menor impacto possível.

Como as credenciais são geradas

As duas credenciais nascem do mesmo princípio: um valor aleatório grande o bastante para ser inviável de adivinhar, produzido por um gerador de números aleatórios criptograficamente seguro, o mesmo tipo de mecanismo usado para gerar chaves de criptografia, não um gerador pseudoaleatório comum de propósito geral.

ValorTamanhoCodificação
Segredo da credencial de conta192 bits de aleatoriedadebase64url
Prefixo da credencial de conta48 bits de aleatoriedadebase64url
Chave do processo192 bits de aleatoriedadebase64url
O que 192 bits significa na prática Cada bit adicional dobra o número de tentativas necessárias para adivinhar o valor por força bruta. 128 bits já é o patamar que a criptografia moderna trata como inquebrável na prática. Nenhuma capacidade computacional hoje disponível chega perto de esgotar esse espaço de valores em tempo útil. Com 192 bits, a credencial fica ainda mais confortavelmente acima desse patamar.

Nada nesse processo é derivado de datas, nomes, e-mails ou qualquer informação previsível, e duas credenciais geradas em sequência não têm relação matemática nenhuma entre si. Descobrir uma não ajuda a adivinhar a próxima, nem existe um padrão para "enumerar" credenciais válidas testando candidatos em sequência.

O prefixo da credencial de conta (a parte visível, ex.: bm_live_AbCd1234) não é secreto. Serve só para localizar rapidamente a qual conta uma credencial pertence, sem precisar testar o segredo contra todas as contas existentes. Quem efetivamente autentica é o segredo depois do ponto, e é essa parte que nunca é reexibida depois da criação.

Por que base64url Os valores são codificados em base64url. A variante do base64 segura para uso em URLs e headers HTTP, sem os caracteres +, / ou = que exigiriam escape em alguns contextos. Na prática, isso significa que nenhuma credencial gerada pela plataforma quebra ao ser colada direto num header, numa variável de ambiente ou numa linha de comando.

Nada de segredo guardado em texto puro

A credencial de conta nunca é armazenada em sua forma original. No momento da criação, apenas uma impressão digital criptográfica (hash) dela é guardada. Mesmo com acesso total ao banco de dados, não é possível recuperar o segredo original a partir do que fica salvo. Só é possível confirmar se um valor apresentado bate com o hash guardado.

É por isso que o segredo completo só aparece uma única vez, no momento em que você gera a credencial: depois disso, nem a própria plataforma consegue mostrá-lo de novo.

Comparação em tempo constante A verificação do segredo (e da chave de processo) não usa uma comparação simples de texto. Usa uma técnica que leva sempre o mesmo tempo para responder, seja o valor certo ou errado. Isso fecha uma categoria inteira de ataque em que alguém tenta adivinhar um segredo caractere por caractere medindo o tempo de resposta do servidor.

A chave de processo, por sua natureza, ainda é reexibida por você mesmo no card do agente (é o modelo que permite renovar/copiar o código quando necessário). A proteção dela vem de outro lugar: só é aceita se o processo estiver com o acesso via API liberado, e pode ter validade e revogação configuradas (ver Chaves de API).

Autorização sem token de dono

Um detalhe importante de design: quando você chama a API sobre um processo que foi compartilhado com você (não é seu), você nunca precisa informar quem é o dono daquele processo. A plataforma resolve isso sozinha, na seguinte ordem:

  1. Confere se o processo é seu.
  2. Se não for, confere se ele foi compartilhado com a sua conta. E, se foi, o próprio registro do compartilhamento já indica quem é o dono real.
  3. Só então valida se a chave apresentada pertence àquele processo, e se o compartilhamento inclui a permissão exigida pela ação (por exemplo, executar).

Isso elimina uma categoria de erro (e de risco) comum em integrações: nunca existe um campo "token do dono" para preencher errado, copiar de outro sistema ou vazar por engano. A identidade de quem possui o processo simplesmente não trafega pela chamada.

Expiração e revogação

CredencialExpiraçãoRevogação
ContaOpcional, definida na criaçãoRevogar (mantém histórico) ou excluir (remove o registro)
Chave de processoOpcional, definida por identificadorRenovar (gera novo código) ou remover a chave

Uma credencial expirada ou revogada passa a ser recusada imediatamente. Não existe carência nem cache de autorização entre chamadas. O mesmo vale para o interruptor de Permissão de Acesso das APIs do processo: desligá-lo bloqueia toda chave daquele processo na hora, mesmo as que continuam válidas.

Limites de uso e superfície de ataque

Rastreabilidade: quem fez o quê

Toda execução disparada via API carrega duas informações de identidade, com finalidades diferentes:

Isso significa que, ao investigar uma execução na Trilha de Auditoria, o identificador da chave é o dado mais direto para apontar qual integração a originou.

Isolamento da camada de integração

A API externa roda como uma camada própria, sem depender da sessão de navegador da interface web:

Boas práticas