Advertisement
Guest User

AWS4 Signing via Postman

a guest
Feb 4th, 2019
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var datetime = (new Date()).toISOString().replace(/[:\-]|\.\d{3}/g, '');
  2.  
  3. var req = buildRequest(pm.environment.get('ESHost'), request.data);
  4.  
  5. pm.environment.set('authorization', req.headers.Authorization);
  6. pm.environment.set('xAmzDate', datetime);
  7.  
  8. function buildRequest(endpoint, body) {
  9.   var endpointParts = endpoint.match(/^([^\.]+)\.?([^\.]*)\.?([^\.]*)\.amazonaws\.com$/);
  10.   var region = endpointParts[2];
  11.   var service = endpointParts[3];
  12.   //var datetime = (new Date()).toISOString().replace(/[:\-]|\.\d{3}/g, '');
  13.   var date = datetime.substr(0, 8);
  14.   var kDate = hmac('AWS4' + pm.globals.get('secret_key'), date);
  15.   var kRegion = hmac(kDate, region);
  16.   var kService = hmac(kRegion, service);
  17.   var kSigning = hmac(kService, 'aws4_request');
  18.  
  19.   var request = {
  20.     host: endpoint,
  21.     method: 'POST',
  22.     path: '/myindex/_doc/_search',
  23.     body: body,
  24.     headers: {
  25.       'Content-Type': 'application/json',
  26.       'Host': endpoint,
  27.       'Content-Length': Buffer.byteLength(body),      
  28.       'X-Amz-Date': datetime
  29.     }
  30.   };
  31.  
  32.   var canonicalHeaders = Object.keys(request.headers)
  33.     .sort(function(a, b) { return a.toLowerCase() < b.toLowerCase() ? -1 : 1; })
  34.     .map(function(k) { return k.toLowerCase() + ':' + request.headers[k]; })
  35.     .join('\n');
  36.   console.log('canonicalHeaders='+canonicalHeaders);
  37.  
  38.   var signedHeaders = Object.keys(request.headers)
  39.     .map(function(k) { return k.toLowerCase(); })
  40.     .sort()
  41.     .join(';');
  42.   console.log('signedHeaders='+signedHeaders);
  43.  
  44.   var canonicalString = [
  45.     request.method,
  46.     request.path, '',
  47.     canonicalHeaders, '',
  48.     signedHeaders,
  49.     hash(request.body),
  50.   ].join('\n');
  51.   console.log('canonicalString='+canonicalString);
  52.  
  53.   var credentialString = [ date, region, service, 'aws4_request' ].join('/');
  54.  
  55.   var stringToSign = [
  56.     'AWS4-HMAC-SHA256',
  57.     datetime,
  58.     credentialString,
  59.     hash(canonicalString)
  60.   ] .join('\n');
  61.  
  62.   request.headers.Authorization = [
  63.     'AWS4-HMAC-SHA256 Credential=' + pm.globals.get('access_key') + '/' + credentialString,
  64.     'SignedHeaders=' + signedHeaders,
  65.     'Signature=' + hmac(kSigning, stringToSign)
  66.   ].join(', ');
  67.  
  68.   return request;
  69. }
  70.  
  71. function hmac(key, str) {
  72.   return CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256(str, key));
  73. }
  74.  
  75. function hash(str) {
  76.   return CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(str));
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement