JSON Web Token (JWT)
Guia de Segurança para Webhooks da Facesign (com uso de JWT)
Introdução
Esta seção descreve o mecanismo de segurança adotado pela Facesign para envio de webhooks, com base na tecnologia JWT (JSON Web Token). O uso do JWT permite garantir a autenticidade das mensagens enviadas, preservar a integridade dos dados e mitigar riscos como falsificação e reutilização de requisições (replay attacks).
Motivação para o uso de JWT
Webhooks são utilizados pela Facesign para notificar sistemas integrados sobre eventos relevantes (por exemplo, a assinatura de um documento). Para assegurar que essas notificações:
Sejam provenientes da Facesign,
Não tenham sido alteradas durante o trânsito,
Não sejam reutilizadas de forma indevida,
é adicionado um token JWT assinado a cada webhook enviado.
Conceito de JWT
O JWT (JSON Web Token) é um padrão de token assinado digitalmente que contém informações relevantes sobre o evento enviado. Ele é composto por três partes:
Header: metadados sobre o tipo do token e algoritmo utilizado.
Payload: dados do evento, como timestamps, tipo de evento, identificadores.
Signature: assinatura digital que garante a integridade do conteúdo.
Esse token funciona como um envelope lacrado: qualquer tentativa de alteração em seu conteúdo invalida a assinatura.
Funcionamento do processo
Emissão do webhook pela Facesign
A Facesign gera um JWT contendo os dados do evento.
O JWT é assinado com uma chave segura.
O webhook é enviado via requisição HTTP, com o JWT incluso no cabeçalho da requisição.
Processamento e validação no sistema receptor
O sistema receptor extrai o JWT da requisição recebida.
O token é validado quanto à origem, assinatura e validade temporal.
Os dados do evento são processados conforme a necessidade da aplicação.
Exemplo de webhook enviado
Exemplo de validação do JWT (em Python)
Elementos que devem ser validados no token
iss
: Confirma que o token foi emitido pela Facesign.aud
: Garante que o token é destinado à aplicação correta.iat
eexp
: Verificam a validade temporal do token.jti
: Identificador único do token, útil para evitar reprocessamento de mensagens.
Recomendações de segurança
Utilização de HTTPS: O endpoint de recebimento de webhooks deve operar obrigatoriamente sob HTTPS, garantindo a proteção dos dados em trânsito.
Expiração de tokens: Os tokens emitidos possuem tempo de validade reduzido. É essencial que a verificação de expiração seja implementada.
Mitigação de replay attacks: Recomenda-se armazenar temporariamente os valores de
jti
dos tokens já processados, de forma a evitar a execução repetida de um mesmo evento.Proteção da chave secreta: A chave utilizada para verificação da assinatura JWT deve ser armazenada de forma segura, sem exposição pública ou em repositórios versionados.
Atualizado