Создание безопасного промежуточного ПО для вебхуков Didit с помощью AWS Lambda (RU)
Узнайте, как создать надежное и безопасное промежуточное ПО API Gateway для вебхуков Didit с использованием AWS Lambda. В этом руководстве рассматриваются проверка подписи, валидация временных меток и асинхронная обработка.

Безопасный прием вебхуков Реализация проверки подписи HMAC-SHA256 и валидации временных меток имеет решающее значение для защиты вебхуков Didit от подделки и атак повторного воспроизведения, обеспечивая целостность и подлинность данных.
Архитектура асинхронной обработки Использование AWS Lambda и SQS разделяет прием вебхуков и их обработку, повышая масштабируемость, надежность и позволяя использовать сложную последующую логику без влияния на ответы в реальном времени.
Обновления личности в реальном времени Вебхуки Didit предоставляют мгновенные уведомления о результатах проверки личности, позволяя немедленно обновлять статусы пользователей, оповещения о мошенничестве или записи о соответствии в вашем приложении.
Подход Didit, ориентированный на разработчиков Didit предлагает модульную архитектуру и чистые API, что упрощает интеграцию результатов проверки личности в реальном времени в ваши системы, дополнительно улучшенную бесплатным базовым предложением KYC и отсутствием платы за настройку.
Важность безопасной обработки вебхуков
В современном взаимосвязанном цифровом мире обмен данными в реальном времени имеет первостепенное значение, особенно для таких критически важных функций, как проверка личности. Вебхуки служат основой для этих уведомлений в реальном времени, позволяя таким службам, как Didit, мгновенно информировать ваше приложение о результате проверки личности, результате проверки AML или статусе обнаружения живости. Однако простого получения данных недостаточно; обеспечение их подлинности, целостности и своевременной обработки жизненно важно. Незащищенная конечная точка вебхука может быть значительной уязвимостью, подверженной подделке данных, атакам повторного воспроизведения или попыткам отказа в обслуживании. Именно здесь хорошо спроектированное промежуточное ПО API Gateway, особенно для вебхуков Didit, становится незаменимым.
Когда Didit завершает проверку личности, пассивную и активную проверку живости, сопоставление лиц 1:1 или проверку AML, он отправляет вебхук на настроенную вами конечную точку. Это уведомление содержит важную информацию о статусе проверки. Без надлежащих мер безопасности злоумышленники могут подделать эти уведомления, что приведет к неверным решениям о регистрации пользователей или мошенническим действиям. Например, поддельный статус «проверено» может предоставить доступ злоумышленнику, в то время как поддельный статус «неудачно» может привести к блокировке законных пользователей. Поэтому создание безопасного и надежного механизма приема вебхуков — это не просто хорошая практика; это необходимость для поддержания безопасности и соответствия вашей платформы.
Создание надежного промежуточного ПО с помощью AWS Lambda и API Gateway
Чтобы эффективно и безопасно обрабатывать вебхуки Didit, мы можем использовать мощь AWS Lambda и API Gateway для создания бессерверного промежуточного ПО. Эта архитектура обеспечивает масштабируемость, экономичность и высокую доступность, идеально подходящую для обработки данных, управляемой событиями. Основная идея заключается в том, чтобы API Gateway выступал в качестве точки входа, перенаправляя запросы в функцию Lambda, ответственную за первоначальную проверку и безопасную обработку.
Шаг 1: Настройка API Gateway в качестве точки входа
Ваш AWS API Gateway будет предоставлять общедоступную конечную точку (например, /api/webhooks/didit), на которую Didit будет отправлять свои вебхуки. Крайне важно настроить эту конечную точку для приема запросов POST и интегрировать ее с вашей функцией Lambda. В отличие от традиционных настроек, API Gateway должен быть настроен на передачу необработанного тела запроса непосредственно в Lambda без немедленного анализа JSON. Это связано с тем, что для проверки подписи требуется точная необработанная полезная нагрузка, отправленная Didit.
Шаг 2: Реализация безопасной проверки в AWS Lambda
Функция Lambda — это сердце вашего промежуточного ПО. После получения вебхука она должна выполнить несколько критически важных шагов проверки перед обработкой данных:
- Чтение необработанного тела запроса: Функция Lambda должна иметь доступ к необработанному телу запроса. Это необходимо для проверки подписи HMAC-SHA256.
- Проверка подписи HMAC-SHA256: Вебхуки Didit включают заголовок
X-Signature, содержащий подпись HMAC-SHA256. Ваша функция Lambda будет использовать ваш секрет вебхука (общий для вашего приложения и Didit) для вычисления собственной подписи из необработанного тела запроса. Если вычисленная подпись не совпадает с заголовкомX-Signature, вебхук недействителен и должен быть немедленно отклонен. Это защищает от подделки данных. - Проверка временной метки: Didit также включает заголовок
X-Timestamp. Ваша функция Lambda должна убедиться, что эта временная метка актуальна, обычно в течение 5-минутного окна от текущего времени. Это предотвращает атаки повторного воспроизведения, когда злоумышленник может повторно отправить старое, законное событие вебхука. - Разбор тела JSON: Только после успешной проверки подписи и временной метки необработанное тело должно быть разобрано в объект JSON.
Вот концептуальный фрагмент кода Python для проверки подписи в вашей 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'})
}
Асинхронная обработка для масштабируемости и надежности
После проверки вебхука, как правило, лучше всего отделить процесс приема от фактической бизнес-логики. Это означает, что ваша функция Lambda после проверки не должна напрямую выполнять сложные операции с базой данных или вызовы внешних API. Вместо этого она должна просто отправлять проверенную полезную нагрузку в асинхронную очередь обработки, такую как AWS SQS (Simple Queue Service).
Эта архитектура предлагает несколько преимуществ:
- Масштабируемость: Ваш API Gateway и начальная Lambda могут обрабатывать большой объем входящих вебхуков без узких мест из-за последующей обработки.
- Надежность: Если ваши нижестоящие системы временно недоступны, сообщения остаются в очереди, предотвращая потерю данных.
- Разделение: Различные функции Lambda или службы могут обрабатывать сообщения из очереди SQS, что позволяет модульно и независимо разрабатывать и развертывать вашу бизнес-логику (например, обновлять записи пользователей, запускать оповещения AML или регистрировать результаты проверки).
- Быстрые ответы: Начальная конечная точка вебхука может быстро отвечать (например, с кодом 200 OK), предотвращая ненужные повторные попытки Didit.
Это гарантирует, что независимо от того, выполняете ли вы проверку личности, используете NFC-верификацию для электронных паспортов или оценку возраста для соблюдения требований, результаты обрабатываются эффективно и надежно.
Как Didit помогает
Didit — это AI-native, ориентированная на разработчиков платформа идентификации, разработанная для модульности и простоты интеграции. Наши вебхуки являются ярким примером этой философии, предоставляя безопасные уведомления в реальном времени о статусе ваших рабочих процессов проверки личности. Предлагая чистый API и исчерпывающую документацию, Didit упрощает настройку и интеграцию этих вебхуков в ваше пользовательское промежуточное ПО, такое как решение AWS Lambda и API Gateway, описанное выше.
Платформа Didit поддерживает широкий спектр примитивов проверки личности, включая проверку личности (OCR, MRZ, штрих-коды), пассивную и активную проверку живости, сопоставление лиц 1:1 и поиск лиц, проверку и мониторинг AML, подтверждение адреса, оценку возраста, проверку телефона и электронной почты, а также NFC-верификацию. Результаты любой из этих проверок могут быть доставлены через наши безопасные вебхуки, что позволяет создавать высокоотзывчивые и автоматизированные системы. Кроме того, Didit предлагает бесплатный базовый KYC, модульную архитектуру и отсутствие платы за настройку, что делает его доступным и мощным выбором для компаний любого размера, стремящихся автоматизировать доверие и управлять рисками.
Готовы начать?
Готовы увидеть Didit в действии? Получите бесплатную демонстрацию сегодня.
Начните бесплатно проверять личности с бесплатным тарифом Didit.