Что делает этот калькулятор подписи HTTP
"Подпись запроса, которую мы рассчитали, не соответствует подписи, которую вы предоставили" является одной из самых разочаровывающих ошибок в работе API, потому что сервер никогда не говорит вам, какой шаг пошел не так. Этот калькулятор воспроизводит весь процесс подписания для AWS Signature Version 4, Alibaba Cloud ACS3-HMAC-SHA256, Tencent Cloud TC3-HMAC-SHA256 и OAuth 1.0a HMAC-SHA1, и показывает каждое промежуточное значение: канонический запрос, его хэш, строку для подписания, выведенный ключ подписи и окончательную подпись и заголовки. Он также проверяет входящие webhook подписи из GitHub, Stripe и Slack. Вся криптография использует веб-крипто-API браузера, поэтому ваши секретные ключи остаются на вашем устройстве.
Как пользоваться
- Выберите провайдера.
- Введите метод, URL, заголовки (один
Name: valueна строку) и тело точно так, как ваш код отправляет их. - Введите ключ доступа, секретный ключ и, в случае необходимости, регион и услугу. Нажмите ** Использовать текущее время ** или прикрепите фиксированную метку времени для сравнения с захваченным запросом.
- Сравните каждый шаг с тем, что записывает ваш SDK или код. Первый шаг, который отличается, - это место, где находится жук.
- Для webhooks вставьте строгое запросное тело байт за байт, заголовок подписи и ваш секрет подписи, и инструмент скажет вам, совпадает ли он.
Частые причины несоответствия подписи
- Каноническое кодирование URI: AWS кодирует каждый сегмент пути; S3 не кодирует дважды.
- ** Порядок запроса:** параметры должны быть сортированы по кодированному ключу, а пустые значения все еще требуют
=. - ** Подписанные заголовки:** Названия заголовков загружены, подрезаны, сортированы и соединены с
;. Забытиеhostилиx-amz-date- это обычное явление. - Хэш полезной нагрузки: S3 требует заголовка
x-amz-content-sha256; другие сервисы просто хэшируют тело. - ** Склонение по времени:** большинство провайдеров отклоняют запросы с отрывом более 515 минут.
- Webhooks: Фреймворки часто анализируют и пересериализируют JSON до того, как вы его увидите. Проверьте на основе сырых байтов, а не перекодированного объекта. Полосатые знаки
timestamp.body, слабые знакиv0:timestamp:body.