Segredo e rotação

Para: Dev · Adm — Conferido em 2026-10-18.

O segredo de webhook (whsec_…) é a chave com que o Dracma assina cada entrega e com que o seu receptor a verifica. O primeiro segredo só existe depois que você clica em "Rotacionar segredo" no painel. A rotação mantém o segredo anterior por 7 dias, e "revogar" um segredo vazado é, na prática, rotacionar duas vezes.

O que é

Propriedade Valor
Formato whsec_ seguido de 64 caracteres hexadecimais (32 bytes aleatórios de um gerador criptográfico).
Quem gera O Dracma, ao rotacionar. Você não escolhe nem importa o valor.
Uso Chave do HMAC-SHA256 que assina cada entrega. Veja Requisição e assinatura.
Quantos No máximo 2 ativos por operação ao mesmo tempo.
Exibição Uma única vez, na resposta da rotação. O painel nunca mostra o valor de novo; só o id, a data de criação, a expiração e o estado de cada segredo.
Em repouso Guardado cifrado no Dracma.

O segredo de webhook é outro segredo, diferente do segredo de chamada da API (sk_…). Guarde os dois no cofre, cada um separado, e nunca no navegador nem em código de frontend.

Quando usar

O primeiro segredo

O segredo não chega pronto

Ao cadastrar a URL, o Dracma não cria um segredo. O primeiro whsec_ só existe depois de "Rotacionar segredo" na tela de webhooks do painel, feito por quem tem permissão de gerenciar webhooks (no onboarding, o administrador do seu tenant). Não há envio do segredo por e-mail nem por canal fora do painel.

Sem segredo ativo, o Dracma não envia a entrega: a tentativa falha antes de sair, e o evento percorre o cronograma até a DLQ. Por isso:

  1. Cadastre a URL (Seu endpoint).
  2. Rotacione o segredo, copie o valor na hora e guarde-o no cofre do receptor.
  3. Só então gere eventos.

Rotação

A rotação exige:

  • permissão de gerenciar webhooks na operação;
  • confirmação de identidade adicional no painel (step-up);
  • uma pessoa: diferente da mudança de URL, a rotação não precisa de aprovação de uma segunda pessoa nem de espera.

A rotação vale imediatamente. Todas as ações ficam na trilha de auditoria do painel, sem o valor do segredo.

Como funciona

Sobreposição de 7 dias

Quando você rotaciona:

  • o segredo novo passa a assinar imediatamente;
  • o segredo que era o mais novo até agora vira o anterior e continua assinando por 7 dias; depois ele expira;
  • qualquer segredo mais antigo que o anterior expira na hora.

Enquanto os dois valem, cada entrega leva dois v1, o do segredo novo primeiro. O seu receptor mantém uma lista de segredos ativos (1 ou 2 itens) e aceita se qualquer v1 bater com qualquer segredo da lista, em tempo constante e sem sair do laço no primeiro acerto.

sequenceDiagram participant P as Painel (você) participant D as Dracma participant R as Seu receptor P->>D: Rotacionar segredo D-->>P: whsec_NOVO (exibido uma vez) P->>R: Adiciona whsec_NOVO à lista de segredos (cofre ou deploy) Note over D,R: Por 7 dias, cada entrega traz v1 do NOVO e v1 do ANTERIOR D->>R: POST com dois v1 R-->>D: 200 (qualquer v1 bate) Note over R: Depois de confirmar, remove o ANTERIOR da lista Note over D: Ao fim de 7 dias o ANTERIOR expira e só o NOVO assina

Procedimento sem perder entrega

  1. Rotacione no painel e copie o whsec_ novo.
  2. Adicione o segredo novo à lista do receptor pelo cofre ou pelo pipeline de deploy, nunca à mão no servidor. O receptor passa a aceitar os dois.
  3. Confirme que os webhooks continuam sendo aceitos (o log de entregas do painel mostra 2xx).
  4. Remova o segredo anterior da lista do receptor, depois de confirmar. O Dracma continua enviando dois v1 até o anterior expirar; o receptor com um segredo só ignora o v1 que não conhece.

Você pode inverter os passos 2 e 3 sem risco: o receptor que só conhece o segredo novo aceita o 1º v1, e o que ainda só conhece o anterior aceita o 2º. Foi pensado para que a rotação nunca derrube a integração.

Quando rotacionar

Recomendação, não regra

O Dracma recomenda rotacionar o segredo de webhook periodicamente, por exemplo a cada 90 dias. Nenhuma regra do Dracma impõe isso: o segredo não expira sozinho e o painel não envia lembrete. A rotina de rotação é responsabilidade da sua equipe.

Rotacione também quando alguém que conhecia o segredo sair do projeto e sempre que houver suspeita de vazamento.

Exemplos

Linha do tempo de um segredo, com duas rotações seguidas (S1 é o segredo original):

Momento S1 S2 S3 Segredos que assinam
Antes da 1ª rotação ativo n/a n/a S1
1ª rotação (dia 0) expira no dia 7 ativo n/a S2, S1 (dois v1)
Dia 7 expirado ativo n/a S2
2ª rotação (no dia 0, logo depois da 1ª) expira agora expira no dia 7 ativo S3, S2

Estados que o painel mostra para cada segredo: o mais novo está active; um segredo anterior com data de expiração futura está expiring (a operação fica em "rotação" enquanto houver um). Segredos vencidos deixam de aparecer.

Erros e casos de borda

Segredo vazado: "revogar" é rotacionar duas vezes

Não disponível

O painel não tem uma ação "revogar segredo de webhook". Textos antigos falavam em "revogação de emergência no painel, com efeito em até cerca de 5 minutos"; isso não existe para webhooks.

O que protege o seu dinheiro quando o segredo vaza:

  1. O fetch-back. Quem tem o segredo consegue forjar um webhook com assinatura válida, mas o seu receptor só credita pelo estado que a API devolve para a sua credencial. Um webhook forjado não cria dinheiro. Veja Receptor passo a passo.
  2. A sua lista de segredos. O que decide se um webhook é aceito é a lista do seu receptor, não o relógio do Dracma.

Procedimento de emergência, nesta ordem:

  1. Rotacione no painel e obtenha o segredo novo. Como explicado acima, o segredo vazado continua assinando no Dracma por 7 dias; isso é irrelevante para a segurança, porque o que importa é o que o seu receptor aceita.
  2. Troque a lista do receptor: coloque o segredo novo e remova imediatamente o vazado. A partir daqui, nenhum webhook assinado só com o segredo vazado é aceito.
  3. Rotacione uma segunda vez se quiser que o Dracma pare de assinar com o segredo vazado agora: a 2ª rotação expira na hora o segredo mais antigo e deixa o anterior por mais 7 dias. Adicione o segredo da 2ª rotação ao receptor.
  4. Procure forjados: compare os eventos que o seu receptor processou com GET /events e com a reconciliação (Recuperação com GET /events).
  5. Descubra a origem do vazamento (log, repositório, ferramenta de suporte) e corrija.

O passo 2 é o que fecha a janela de aceitação; o passo 1 sozinho não basta.

Outros casos

Situação O que acontece O que fazer
Perdeu o valor do segredo O painel não mostra o valor de novo. Rotacione e atualize o receptor.
Receptor responde 401 logo depois da rotação O receptor só conhece o segredo antigo ou só o novo e testa só o primeiro v1. Mantenha a lista de segredos e teste todos os pares.
Rotacionou duas vezes por engano O segredo mais antigo expirou na hora. Se o receptor só tinha o antigo, adicione os dois mais novos à lista.
Segredo usado em frontend ou em log Exposição. Trate como vazado (procedimento acima).
Rotação feita por quem não tem permissão O painel recusa. Peça ao administrador do tenant.

Veja também