Java библиотека

@javalib
Фото Проверяем подпись входящего webhook на Java! Сначала сверяем HMAC-подпись провайдера с исходными байтами тела, а уже после проверки разбираем JSON. Считаем ожидаемую подпись от сырого тела запроса: Mac mac = Mac.getInstance("HmacSHA256"); mac.init(new SecretKeySpec(secret, "HmacSHA256")); byte[] expected = mac.doFinal(rawBody); Секрет передаётся в байтах, а rawBody сохраняется без повторной сериализации. Даже изменение пробелов в JSON меняет HMAC, поэтому проверять нужно именно те байты, которые подписал отправитель. Декодируем hex из заголовка и сравниваем подписи: byte[] supplied = HexFormat.of().parseHex(header); boolean valid = MessageDigest.isEqual(     expected, supplied); MessageDigest.isEqual предназначен для сравнения секретных значений без раннего выхода по первому несовпавшему байту. Неверный формат заголовка нужно отдельно считать невалидной подписью, а не продолжать обработку запроса. Принимаем только корректный заголовок: try {     return verify(rawBody, secret, header); } catch (IllegalArgumentException error) {     return false; } До успешной проверки не запускаем логику и не сохраняем событие. Дополнительно проверяем защиту от повторной доставки по идентификатору события. Java Библиотека | Мы в Телеграм
Если у вас установлено приложение,
вы можете сразу перейти в канал