Вот как я генерирую опции для запроса к серверу:
function multipartFormData(params, url, key, nonce, signature) {
var boundary = '----WebKitFormBoundary' + nonce;
var bodyString = [];
bodyString.push(
'--' + boundary,
'Content-Disposition: form-data; name="document"; filename="image.png"',
'Content-Type: image/png',
'',
fs.createReadStream('image/image.png')
);
bodyString.push('--' + boundary + '--','');
var content = bodyString.join('\r\n');
return {
formData: content,
url: url + '/',
headers: {
'Content-Type': 'multipart/form-data; boundary=' + boundary,
'Apiauth-Key': key,
'Apiauth-Nonce': nonce,
'Apiauth-Signature': signature,
'Content-Length': content.length
}
}
}
Есть ключ аутентификации хэша подписи:
function getMessageSignature(path, params, nonce) {
var data_params = params;
var boundary = '----WebKitFormBoundary' + nonce;
var postParameters = querystring.stringify(data_params);
var path = '/api' + path + '/';
let message = nonce + config.key + path + 'POSTmultipart/form-data; boundary=' + boundary + 'image.png';
var auth_hash = crypto.createHmac("sha256", config.secret).update(message).digest('hex').toUpperCase();
return auth_hash;
}
Итак, я просто делаю свой запрос:
function Client(key, secret) {
var nonce = new Date() * 1000;
var config = {
url: 'https://somesite/api',
key: key,
secret: secret
};
// there is other all functions, 2 of them i have already written on top
var signature = getMessageSignature(path, params, nonce);
var options = multipartFormData(params, config.url, config.key, nonce, signature);
request.post(options, function(error, response, body) {
...
}
}
Я получаю эту ошибку в теле запроса: ошибка:
сообщение: «Ключ аутентификации HMAC и подпись были предоставлены, но они недействительны