0.2.0 • Published 5 years ago

aws4-sign v0.2.0

Weekly downloads
9
License
MIT
Repository
github
Last release
5 years ago

aws4-sign

Build Status

AWS Signature Version 4 for node.js and browser.

Notice: this project is rewrote from aws4 by ES6 for using on demand.

Installation

npm install aws4-sign --save
# or
yarn add aws4-sign

Example

Use in browser

<script src="https://unpkg.com/aws4-sign"></script>
<script>
    var sigs = Aws4Sign.sign(
        {
            service: 's3',
            path: '/../../whatever?X-Amz-Expires=1234',
            signQuery: true,
        },
        { accessKeyId: 'a', secretAccessKey: 'b' },
    );
</script>

Use in Node.js

const http = require('http');
const { sign, RequestSigner } = require('aws4-sign');

const opts = {
    host: 'sqs.us-east-1.amazonaws.com',
    path: '/?Action=ListQueues',
};
// assumes AWS credentials are available in process.env
sign(opts, {
    accessKeyId: '<your-access-key-id>',
    secretAccessKey: '<your-secret-access-key>',
});
console.log(opts);
/*
{
  host: 'sqs.us-east-1.amazonaws.com',
  path: '/?Action=ListQueues',
  headers: {
    Host: 'sqs.us-east-1.amazonaws.com',
    'X-Amz-Date': '20121226T061030Z',
    Authorization: 'AWS4-HMAC-SHA256 Credential=ABCDEF/20121226/us-east-1/sqs/aws4_request, ...'
  }
}
*/

// we can now use this to query AWS using the standard node.js http API
http.request(opts, function(res) {
    res.pipe(process.stdout);
}).end();

// Generate CodeCommit Git access password
const signer = new RequestSigner({
    service: 'codecommit',
    host: 'git-codecommit.us-east-1.amazonaws.com',
    method: 'GIT',
    path: '/v1/repos/MyAwesomeRepo',
});
const password = signer.getDateTime() + 'Z' + signer.signature();

API

aws4.sign(requestOptions, credentials)

This calculates and populates the Authorization header of requestOptions, and any other necessary AWS headers and/or request options. Returns requestOptions as a convenience for chaining.

requestOptions is an object holding the same options that the node.js http.request function takes.

The following properties of requestOptions are used in the signing or populated if they don't already exist:

namedefault
hostname/hostwill be determined from service and region
methodGET
path/
body''
servicewill be calculated from hostname or host
region'us-east-1'
domain'amazonaws.com'
headers['Host']will use hostname or host or be calculated if not given
headers['Content-Type']'application/x-www-form-urlencoded; charset=utf-8'
headers['Date']new Date()

Your AWS credentials (which can be found in your AWS console) can be specified in one of two ways:

credentials

You can config credentials, like below:

aws4.sign(requestOptions, {
    secretAccessKey: '<your-secret-access-key>',
    accessKeyId: '<your-access-key-id>',
    sessionToken: '<your-session-token>',
});

Or you can attach them to process.env using dotenv, create .env file in your project root, then put below code before you use aws4 sign

require('dotenv').config();

The sessionToken property and AWS_SESSION_TOKEN environment constiable are optional for signing with IAM STS temporary credentials.

LICENSE

@yugasun

0.2.0

5 years ago

0.1.1

5 years ago

0.1.0

5 years ago