«Ошибка аутентификации HMAC-SHA», созданная в IBM DataPower - PullRequest
0 голосов
/ 17 октября 2018

Привет! У меня есть файл сценария, который я импортирую в 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);


});
...