Подписи
В целях обеспечения безопасности при передаче данных, запросы подписываются.
Перед формированием подписи к параметрам запроса необходимо добавить ключ 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 используя свой секретный ключ и указанную в наборе параметров хэш - функцию