Webhook: подписывайте исходные байты запроса
Для HMAC-SHA256 сервер вычисляет MAC по исходному телу и общему секрету, затем сравнивает результат с присланной подписью.
В Java используются Mac.getInstance("HmacSHA256") и SecretKeySpec. Для сравнения байтовых массивов подходит MessageDigest.isEqual(expected, provided).
Важны детали протокола: секрет может быть строкой или Base64-данными, а подпись — hex либо Base64. Декодируйте именно тот формат, который задаёт отправитель.
Не пересобирайте JSON перед проверкой: пробелы и порядок полей меняют байты. Некорректный формат подписи должен приводить к отказу до обработки события.
HMAC не предотвращает повторную доставку. Для этого отдельно нужны правила проверки времени или учёт идентификаторов событий.
#Java
Java Библиотека | Мы в Телеграм