В настоящее время я использую API Forge Webhooks для обработки различных событий, которые могут произойти в проекте. Все работает нормально, кроме проверки подписи полезной нагрузки.
Причина, по которой я хочу проверить полезную нагрузку, заключается в том, что обратный вызов будет в конечном итоге на моем API, и я хочу отклонить все запросы, которые не приходят от службы webhook Forge .
Шаги, за которыми я следовал:
- Добавить (зарегистрировать) секретный ключ (токен) в Forge. Справочник по API
- Инициирует событие, которое в конечном итоге вызовет мой API для его обработки.
- Проверка заголовка подписи. Выполнил этот урок .
- ПРОБЛЕМА !!! Мой
computedSignature
отличается от подписи, полученной от Forge.
Мой C# код выглядит следующим образом:
private const string SHA_HASH = "sha1hash";
var secretKeyBytes = Encoding.UTF8.GetBytes(ForgeAuthConfiguration.AntiForgeryToken);
using var hmac = new HMACSHA1(secretKeyBytes);
var computedHash = hmac.ComputeHash(request.Body.ReadAsBytes());
var computedSignature = $"{SHA_HASH}={computedHash.Aggregate("", (s, e) => s + $"{e:x2}", s => s)}";
Например, запрос Forge имеет такой заголовок подписи: sha1hash=303c4e7d2a94ccfa559560dc2421cee8496d2d83
Мой C# код вычисляет эту подпись: sha1hash=3bb8d41c3c1cb6c9652745f5996b4e7f832ca8d5
Тот же AntiForgeryToken был отправлено в Forge на шаге 1
Хорошо, я думал, что мой код C# не работает, затем я попытался этот онлайн-генератор HMA C и для заданного ввода, результат это: 3bb8d41c3c1cb6c9652745f5996b4e7f832ca8d5
(так же, как C#)
Хорошо, возможно, онлайн-генератор сломан, я попробовал собственный код в node js, и вот результат:
У меня есть 3 способа шифрования одного и того же тела с использованием того же ключа, и я получаю тот же самый результат каждый раз. НО эти результаты ОТЛИЧАЮТСЯ от подписи, предоставленной Forge, что приводит к провалу проверки и отклонению действительного запроса ...
Кто-нибудь знает, что происходит с этой подписью?
Почему это отличается от моего результата, если я следую их руководству?
Как вы проверяете свои запросы?