Привет! У меня есть файл сценария, который я импортирую в DataPower, который создает проверку подлинности HMAC, но не выполняется при выполнении, получите сообщение «Ошибка проверки подлинности HMAC-SHA».Пробовал аналогичный скрипт с Почтальоном, не проходя через DataPower, и он работал.
Ниже приведен скрипт для Почтальона:
var uuidv1 = require('uuid');
var public_key = '0987654321';
var private_key = '1234567890';
var timestamp = (new Date()).getTime();
var nonce = uuidv1().split('-').join('').substring(0,31);
var method = 'POST';
var request_uri = '/v2/sms/';
var request_url = 'api.smsglobal.com';
var request_port = '443';
// 'http method,content-type,content-MD5,request URI,timestamp'
var signature = [timestamp, nonce, method, request_uri, request_url,request_port].join('\n');
console.log('@@\n' + signature);
var encrypted_signature = CryptoJS.HmacSHA256(signature + '\n', private_key).toString(CryptoJS.enc.Base64);
var authorization = 'MAC id="' + public_key + '", ts="' + timestamp + '", nonce="' + nonce + '", mac="' + encrypted_signature + '"';
console.log('DD\n' + authorization);
pm.environment.set('authorizationHeader', authorization);
Соответствующий скрипт в DataPower:
var crypto = require('crypto');
var public_key = '0987654321';
var private_key = new Buffer('1234567890');
var timestamp = (new Date()).getTime();
//
var transform = require('transform');
var options = {
"xmldom": XML.parse("<foobar/>"),
"location": "local:///generate-uuid.xsl",
"honorAbort": true
};
transform.xslt(options, function(err, nodelist, abortinfo) {
var uuid = (!err && nodelist.length>0) ? nodelist.item(0).textContent : "?";
var nonce = uuid.split('-').join('').substring(0,31);
var method = 'POST';
var request_uri = '/v2/sms/';
var request_url = 'api.smsglobal.com';
var request_port = '443';
// 'http method,content-type,content-MD5,request URI,timestamp'
var signature = [timestamp, nonce, method, request_uri, request_url,request_port].join('\n');
console.log('@@\n' + signature);
var encrypted_signature = crypto.createHmac('sha256', private_key);
var result = encrypted_signature.update(signature + '\n').digest('base64');
var authorization = 'MAC id="' + public_key + '", ts="' + timestamp + '", nonce="' + nonce + '", mac="' + result + '"';
console.log('DD\n' + authorization);
var hm = require('header-metadata');
var headers = hm.current;
headers.set('Content-Type', 'application/json');
headers.set('Authorization', authorization);
});