Configuración Postman para V3
Si llegaste a esta sección es probable que ya sepas para que sirve Postman pero, por las dudas, dejamos el link por si prefieres usarlo: https://www.postman.com/
En realidad, esta sección es una vieja deuda pendiente, que teníamos con los developers que usan nuestra API, ya que, desde que Postman lo permite, nunca publicamos como configurarlo para usar nuestra API.
Es nuestra intención escribir solo como configurar postman para que gestione la Auth (discúlpanos si no es un manual completo).
Crea una nueva collection
Al crear la collection postman quisiera que le cambiaras el nombre...
Nombra la collection
Dale un nombre que te permita reconocer la collection recién creada.
Variables de la collection
Ahora que hiciste lo mínimo, agrega la AppKey y el AppSecret, que te envíamos, como variables para la collection.
Pre-request Scripts de la collection
Justo al costado izquierdo de Variables haz click en Pre-request Scripts y lo verás así:
Códígo del Pre-request scripts
El código necesario para que en los requests se complete la authentication es el siguiente:
const appKey = pm.collectionVariables.get('AutocosmosAppKey'); const appSecret = pm.collectionVariables.get('AutocosmosAppSecret'); function isIdempotent(httpMethod){ return httpMethod !== 'POST' && httpMethod !== 'PUT' && httpMethod !== 'PATCH' && httpMethod !== 'DELETE'; } function headersCanonicalized (method, headers, pathQuery) { var getCanonicalParts = function () { var parts = []; parts.push(method); headers.has('Digest') ? parts.push(headers.get('Digest')) : parts.push(''); headers.has('Date') ? parts.push(headers.get('Date')) : parts.push(''); var acsHeaders = []; pm.request.headers .filter(h => h.key.toLowerCase().startsWith('x-acs-')) .forEach(h => acsHeaders.push([h.key, h.value])); // Headers de ACS ordenados, lowercase, trimmed acsHeaders .sort(function (a, b) { return a[0].toLowerCase().trim() > b[0].trim(); }) .forEach(function (e, idx) { parts.push(e[0].toLowerCase().trim() + ':' + e[1]); }); parts.push(pathQuery); return parts; }; // Todos los componentes de la signature son separados por new-line (\n) return getCanonicalParts().join('\n'); }; if(!isIdempotent(pm.request.method) && pm.request.body){ pm.request.headers.upsert({ key: 'Digest', value: 'sha-256=' + CryptoJS.SHA256(pm.request.body.raw).toString(CryptoJS.enc.Base64) }); } else { pm.request.headers.remove('Digest'); } pm.request.headers.upsert({ key: 'Date', value: new Date().toISOString() }); var canonical = headersCanonicalized(pm.request.method, pm.request.headers, pm.request.url.getPathWithQuery()); pm.request.headers.upsert({ key: 'Authorization', value: 'ACS-HMAC ' + appKey + ':' + CryptoJS.HmacSHA256(canonical, appSecret).toString(CryptoJS.enc.Base64) });
Luego de copiar el código, pégalo directamente en postman:
Ya podrás usar postman para enviar requests a la API de Autocosmos. Guarda los request dentro de la collection creada y se ejecutarán correctamente.