Me gustaría hacer una solicitud a una API usando Postman. Hay un ejemplo en la documentación de la API para Javascript usando axios y crypto.
La documentación dice lo siguiente
Firmar una solicitud El valor de la X-App-Access-Sig es generado por un algoritmo HMAC sha256 utilizando una clave secreta (proporcionada en la generación del App Token) en los bytes obtenidos al concatenar la siguiente información:
Ejemplo:
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; }Mi intento de implementar esto como un script de solicitud previa de cartero:
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)Pero me sale el error:
{ "description": "Request signature mismatch", "code": 401, "correlationId": "req-53db2067-b0ec-4ce8-b333-387b0b20a955", "errorCode": 4003, "errorName": "app-token-signature mismatch" }