I would like to make a request to an API using Postman. There is an example in the API documentation for Javascript using axios and crypto.
The documentation says the following
Signing a request The value of the X-App-Access-Sig is generated by a sha256 HMAC algorithm using a secret key (provided upon App Token generation) on the bytes obtained by concatenating the following information:
Example:
const axios = require('axios');
const crypto = require('crypto');
var config = {};
config.baseURL= BASE_URL;
axios.interceptors.request.use(createSignature, function (error) {
return Promise.reject(error);
})
function createSignature(config) {
console.log('Creating a signature for the request...');
var ts = Math.floor(Date.now() / 1000);
const signature = crypto.createHmac('sha256', SECRET_KEY);
signature.update(ts + config.method.toUpperCase() + config.url);
if (config.data instanceof FormData) {
signature.update (config.data.getBuffer());
} else if (config.data) {
signature.update (config.data);
}
config.headers['X-App-Access-Ts'] = ts;
config.headers['X-App-Access-Sig'] = signature.digest('hex');
return config;
}
My attempt to implement this as a postman Pre-request Script:
var CryptoJs = require("crypto-js")
console.log('Creating a signature for the request...');
const endpoint = pm.request.url.toString().split("{{BASE_URL}}").pop()
var ts = Math.floor(Date.now() / 1000);
const signature = CryptoJs.HmacSHA256(ts + pm.request.method.toUpperCase() + endpoint + pm.request.body, "{{SECRET_KEY}}")
pm.request.headers.add({
key: 'X-App-Access-Ts',
value: ts
})
pm.request.headers.add({
key: 'X-App-Access-Sig',
value: signature.toString(CryptoJs.enc.Hex)
})
console.log(pm.request)
But I get the error:
{
"description": "Request signature mismatch",
"code": 401,
"correlationId": "req-53db2067-b0ec-4ce8-b333-387b0b20a955",
"errorCode": 4003,
"errorName": "app-token-signature mismatch"
}