Construindo um Middleware de Webhook Seguro para Didit com AWS Lambda (PT-BR)
Aprenda a construir um middleware robusto e seguro com API Gateway para webhooks do Didit usando AWS Lambda. Este guia abrange verificação de assinatura, validação de timestamp e processamento assíncrono, garantindo integridade.

Ingestão Segura de Webhooks A implementação da verificação de assinatura HMAC-SHA256 e da validação de timestamp é crucial para proteger os webhooks do Didit contra adulteração e ataques de repetição, garantindo a integridade e autenticidade dos dados.
Arquitetura de Processamento Assíncrono O uso de AWS Lambda e SQS desacopla a ingestão de webhooks do processamento, aumentando a escalabilidade, a confiabilidade e permitindo lógicas complexas a jusante sem impactar as respostas em tempo real.
Atualizações de Identidade em Tempo Real Os webhooks do Didit fornecem notificações instantâneas sobre os resultados da verificação de identidade, permitindo atualizações imediatas nos status dos usuários, alertas de fraude ou registros de conformidade dentro do seu aplicativo.
Abordagem Developer-First do Didit O Didit oferece uma arquitetura modular e APIs limpas, tornando a integração de resultados de verificação de identidade em tempo real em seus sistemas simples, ainda mais aprimorada por uma oferta gratuita de KYC central e sem taxas de configuração.
A Importância do Tratamento Seguro de Webhooks
No cenário digital interconectado de hoje, a troca de dados em tempo real é primordial, especialmente para funções críticas como a verificação de identidade. Webhooks servem como a espinha dorsal para essas notificações em tempo real, permitindo que serviços como o Didit informem seu aplicativo instantaneamente sobre o resultado de uma verificação de identidade, um resultado de triagem AML ou um status de detecção de vivacidade. No entanto, simplesmente receber dados não é suficiente; garantir sua autenticidade, integridade e processamento oportuno é vital. Um endpoint de webhook inseguro pode ser uma vulnerabilidade significativa, suscetível a adulteração de dados, ataques de repetição ou tentativas de negação de serviço. É aqui que um middleware de API Gateway bem projetado, particularmente para os webhooks do Didit, se torna indispensável.
Quando o Didit conclui uma Verificação de ID, verificação de Vivacidade Passiva e Ativa, Correspondência Facial 1:1 ou Triagem AML, ele envia um webhook para o seu endpoint configurado. Esta notificação contém informações cruciais sobre o status da verificação. Sem as medidas de segurança adequadas, atores maliciosos poderiam falsificar essas notificações, levando a decisões incorretas de integração de usuários ou atividades fraudulentas. Por exemplo, um status 'verificado' falsificado poderia conceder acesso a um ator mal-intencionado, enquanto um status 'falho' falsificado poderia levar ao bloqueio de usuários legítimos. Portanto, estabelecer um mecanismo de recepção de webhook seguro e robusto não é apenas uma boa prática; é uma necessidade para manter a segurança e a conformidade da sua plataforma.
Construindo um Middleware Robusto com AWS Lambda e API Gateway
Para lidar de forma eficaz e segura com os webhooks do Didit, podemos aproveitar o poder do AWS Lambda e do API Gateway para criar um middleware serverless. Essa arquitetura oferece escalabilidade, eficiência de custos e alta disponibilidade, perfeitamente adequada para o processamento de dados orientado a eventos. A ideia central é ter o API Gateway atuando como ponto de entrada, encaminhando as solicitações para uma função Lambda responsável pela validação inicial e processamento seguro.
Passo 1: Configurando o API Gateway como Ponto de Entrada
Seu AWS API Gateway exporá um endpoint público (por exemplo, /api/webhooks/didit) para onde o Didit enviará seus webhooks. É crucial configurar este endpoint para aceitar solicitações POST e integrá-lo com sua função Lambda. Ao contrário das configurações tradicionais, o API Gateway deve ser configurado para passar o corpo da solicitação bruto diretamente para o Lambda sem a análise imediata de JSON. Isso ocorre porque a verificação de assinatura requer o payload bruto exato enviado pelo Didit.
Passo 2: Implementando Validação Segura no AWS Lambda
A função Lambda é o coração do seu middleware. Ao receber um webhook, ela deve realizar várias etapas críticas de validação antes de processar os dados:
- Ler o Corpo da Requisição Bruto: A função Lambda deve acessar o corpo da requisição bruto. Isso é essencial para a verificação de assinatura HMAC-SHA256.
- Verificar Assinatura HMAC-SHA256: Os webhooks do Didit incluem um cabeçalho
X-Signaturecontendo uma assinatura HMAC-SHA256. Sua função Lambda usará seu segredo de webhook (compartilhado entre seu aplicativo e o Didit) para calcular sua própria assinatura a partir do corpo da requisição bruto. Se a assinatura calculada não corresponder ao cabeçalhoX-Signature, o webhook é inválido e deve ser rejeitado imediatamente. Isso protege contra adulteração de dados. - Validar Timestamp: O Didit também inclui um cabeçalho
X-Timestamp. Sua função Lambda deve verificar se este timestamp é recente, geralmente dentro de uma janela de 5 minutos do tempo atual. Isso evita ataques de repetição, onde um invasor pode reenviar um evento de webhook antigo e legítimo. - Analisar Corpo JSON: Somente após a verificação bem-sucedida da assinatura e do timestamp, o corpo bruto deve ser analisado em um objeto JSON.
Aqui está um trecho conceitual em Python para verificação de assinatura dentro do seu Lambda:
import hmac
import hashlib
import time
import json
def verify_webhook_signature(body, headers, secret):
signature_header = headers.get('X-Signature')
timestamp_header = headers.get('X-Timestamp')
if not signature_header or not timestamp_header:
return False, "Missing signature or timestamp header"
# Check timestamp for freshness (e.g., within 5 minutes)
current_time = int(time.time())
event_timestamp = int(timestamp_header)
if abs(current_time - event_timestamp) > 300: # 300 seconds = 5 minutes
return False, "Webhook timestamp too old or too far in future"
# Reconstruct the signed payload
signed_payload = f"v1:{timestamp_header}:{body}"
# Compute HMAC signature
expected_signature = hmac.new(
secret.encode('utf-8'),
signed_payload.encode('utf-8'),
hashlib.sha256
).hexdigest()
# Compare signatures in a secure way (constant time comparison)
if hmac.compare_digest(signature_header, expected_signature):
return True, "Signature valid"
else:
return False, "Signature mismatch"
# In your Lambda handler:
def lambda_handler(event, context):
body = event['body'] # Raw request body
headers = event['headers']
webhook_secret = "YOUR_DIDIT_WEBHOOK_SECRET" # Store securely, e.g., in AWS Secrets Manager
is_valid, message = verify_webhook_signature(body, headers, webhook_secret)
if not is_valid:
print(f"Webhook validation failed: {message}")
return {
'statusCode': 403,
'body': json.dumps({'message': 'Unauthorized'})
}
# If valid, parse JSON and proceed with processing
payload = json.loads(body)
# ... process payload ...
return {
'statusCode': 200,
'body': json.dumps({'message': 'Webhook received and processed'})
}
Processamento Assíncrono para Escalabilidade e Confiabilidade
Após validar o webhook, geralmente é uma boa prática desacoplar o processo de ingestão da lógica de negócios real. Isso significa que sua função Lambda, após a validação, não deve executar diretamente operações complexas de banco de dados ou chamadas de API externas. Em vez disso, ela deve simplesmente enviar o payload validado para uma fila de processamento assíncrono, como o AWS SQS (Simple Queue Service).
Essa arquitetura oferece várias vantagens:
- Escalabilidade: Seu API Gateway e Lambda inicial podem lidar com um grande volume de webhooks de entrada sem serem gargalados pelo processamento a jusante.
- Confiabilidade: Se seus sistemas a jusante estiverem temporariamente indisponíveis, as mensagens permanecem na fila, evitando a perda de dados.
- Desacoplamento: Diferentes funções ou serviços Lambda podem processar mensagens da fila SQS, permitindo o desenvolvimento e a implantação modulares e independentes de sua lógica de negócios (por exemplo, atualização de registros de usuários, acionamento de alertas AML ou registro de resultados de verificação).
- Respostas Rápidas: O endpoint inicial do webhook pode responder rapidamente (por exemplo, com um 200 OK), evitando que o Didit tente novamente o webhook desnecessariamente.
Isso garante que, seja você realizando Verificação de ID, usando Verificação NFC para ePassaportes ou aproveitando a Estimativa de Idade para conformidade, os resultados sejam processados de forma eficiente e confiável.
Como o Didit Ajuda
Didit é uma plataforma de identidade nativa de IA, focada no desenvolvedor, projetada para modularidade e facilidade de integração. Nossos webhooks são um excelente exemplo dessa filosofia, fornecendo notificações seguras e em tempo real sobre o status de seus fluxos de trabalho de verificação de identidade. Ao oferecer uma API limpa e documentação abrangente, o Didit torna simples configurar e integrar esses webhooks em seu middleware personalizado, como a solução AWS Lambda e API Gateway descrita acima.
A plataforma do Didit oferece suporte a uma ampla gama de primitivas de verificação de identidade, incluindo Verificação de ID (OCR, MRZ, códigos de barras), Vivacidade Passiva e Ativa, Correspondência Facial 1:1 e Pesquisa Facial, Triagem e Monitoramento AML, Comprovação de Endereço, Estimativa de Idade, Verificação de Telefone e E-mail e Verificação NFC. Os resultados de qualquer uma dessas verificações podem ser entregues por meio de nossos webhooks seguros, permitindo que você construa sistemas altamente responsivos e automatizados. Além disso, o Didit oferece KYC Central Gratuito, uma arquitetura modular e sem taxas de configuração, tornando-o uma escolha acessível e poderosa para empresas de todos os tamanhos que buscam automatizar a confiança e orquestrar riscos.
Pronto para Começar?
Pronto para ver o Didit em ação? Obtenha uma demonstração gratuita hoje.
Comece a verificar identidades gratuitamente com o nível gratuito do Didit.