Как сделать запрос multipart / form-data с помощью хеш-ключа? - PullRequest
0 голосов
/ 19 октября 2018

Вот как я генерирую опции для запроса к серверу:

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 и подпись были предоставлены, но они недействительны

...