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

Crea una collection

Al crear la collection postman quisiera que le cambiaras el nombre...

Collection creada

Nombra la collection

Dale un nombre que te permita reconocer la collection recién creada.

Nombra la collection

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.

Set variables de 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í:

Select pre-request scripts de la collection

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:

pre-request scripts con codigo pegado

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.