Подтверждение ответа API

Допустим, у меня есть доступ к API погоды https. Допустим, я запрашиваю его состояние работоспособности в четверг 17/08/2017 23:30 и API отвечает ОК (простой ОК http код).

Как клиент, я должен доказать в будущем, что служба действительно ответила мне этими данными.

Я подумываю попросить API добавить криптографическую подпись отправленных данных + метку времени, чтобы доказать, что они действительно ответили нормально в это конкретное время. Это излишне? Есть ли более простой способ сделать это?

1 ответ

Решение

Цифровая подпись, содержащая текущую дату / время или даже добавление метки времени, выпущенной сторонним органом по меткам времени, является подходящим способом гарантировать, что контент был действительно выпущен в определенную дату.

В общем, реализация системы цифровой подписи на HTTP-запросах не так проста, и вам нужно учитывать множество элементов:

  • Какой контент вы подпишете: заголовки, полезные данные, вложения?

  • Это бинарный контент или текст? Потому что алгоритмы и форматы подписи будут отличаться

  • В случае текста вы должны канонизировать содержимое, чтобы избежать проблем с кодированием при проверке подписи на стороне клиента. Также вам нужно определить алгоритм подписи для вычисления контента для подписи

  • Вам также нужно подписывать вложения, когда они отправляются через потоки? Как вы собираетесь обрабатывать большие файлы?

  • Как вы собираетесь прикрепить подпись к ответу https: специальный заголовок, дополнительный атрибут в полезной нагрузке?

  • Как сервер собирается распространять сертификат подписи? Вы должны включить его в доверенное хранилище на клиенте

Но, если вы хотите только доказать, что ответ службы был OK/FAIL, то серверу просто нужно добавить цифровую подпись поверх полезной нагрузки (или вычислить на основе конкатенации заголовков), но если вы хотите реализовать что-то более сложное, я предлагаю вам взглянуть на Json Web Signature (JWS)

Другие вопросы по тегам