Skip to main content

Подписи

В целях обеспечения безопасности при передаче данных, запросы подписываются.

Перед формированием подписи к параметрам запроса необходимо добавить ключ rand со случайной строкой в качестве значения (и позже передать в качестве параметра типа inputSignature).

Для формирования криптографической подписи данных запроса необходимо сформировать из параметров input запроса строку следующим образом: для каждой пары (ключ, значение), в алфавитном порядке следования ключей, сначала записывается ключ, потом символ :(двоеточие), потом значение. Каждая пара ключ:значение завершается символом ; (точкой с запятой). Если значение в свою очередь является массивом, то для него рекурсивно вызывается та же функция и записывается полученная строка.

Пример кода для формирования строки для mutation buyManyAlfaSkinsPartner

Параметры запроса:

    input: {
task: [{
specId: "QWxmYVNraW46NC0w",
uniqHash: "XXNlcjo4NjI3MjgyNg==",
price: 100000
}]
},
inputSignature: {
rand: "i32zt2gm2x",
signature: ????
}

Строка, формируемая перед подписью:

    function paramsToString(body) {
let paramsString = '';
let keys = Object.keys(body).sort();
if (Array.isArray(body)) {
keys = keys.sort((a, b) => +a - +b);
}
keys.forEach((key) => {
let value = body[key];
if (key === 'signature') {
return;
}
if (value == null) {
value = '';
}
if (typeof value === 'object') {
value = paramsToString(value);
}
paramsString += `${key}:${value};`;
});
return paramsString;
}

paramsToString({
task: [{
specId: "QWxmYVNraW46NC0w",
uniqHash: "XXNlcjo4NjI3MjgyNg==",
price: 100000
}],
rand: "i32zt2gm2x"
})

Полученная строка: rand:i32zt2gm2x;task:0:price:100000;specId:QWxmYVNraW46NC0w;uniqHash:XXNlcjo4NjI3MjgyNg==;;;

Подпись HMAC

Хеш-функция — sha256

Секретный ключ — выдаётся по запросу

Формирование подписи

  • Сформировать строку из данных запроса
  • Сгенерировать HMAC для этой строки, согласно общепринятому алгоритму формирования HMAC RFC 2104 используя свой секретный ключ и указанную в наборе параметров хэш - функцию