Любой API, который двигает деньги, должен доказать по каждому запросу две вещи: что он от вас и что его не подменили и не повторили. HMAC-подпись делает и то, и другое. Вот как это работает и как это использует 0trace.
Что такое HMAC-подпись
HMAC (код аутентификации сообщения на основе хеша) объединяет ваш секретный ключ с сообщением и даёт подпись. Сервер, который знает тот же секрет, пересчитывает подпись и сравнивает. Совпало — запрос подлинный и неизменённый. 0trace использует HMAC-SHA256.
Подписывайте точные байты
Подписывайте сырое тело запроса ровно так, как отправляете — байт в байт. Если сериализовать JSON иначе, чем то, что подписываете (переставленные ключи, лишние пробелы), подписи не совпадут. Соберите тело один раз, подпишите эту строку и отправьте её же.
Добавьте nonce
Одной подписи мало против повторов — тот, кто перехватит валидный запрос, мог бы отправить его снова. Nonce (уникальное значение на запрос) плюс ограниченное временное окно означают, что каждый запрос принимается один раз. 0trace применяет окно от повторов по nonce.
Держите секрет на сервере
Секрет — то, что делает подпись доверенной, поэтому он не должен попадать в браузер или мобильный клиент. Подписывайте на сервере. Если секрет утёк — ротируйте его.
Контракт 0trace
- X-API-KEY: ваш ключ.
- X-API-SIGN: HMAC-SHA256 точного тела запроса, hex.
- X-API-NONCE: уникальное значение на запрос, в пределах окна от повторов.
- Ценообразование и выплаты считаются на сервере, поэтому подделанная сумма не изменит то, что реально рассчитается.