HMAC authentication for nodejs which should be compatible with Amazon.


HMAC authentication module for NodeJS.

Install the module with: npm install ofuda

Ofuda = require('ofuda');
var ofuda = new Ofuda({headerPrefix:'Amz', hash: 'sha1', serviceLabel: 'AWS', accessKeyId: '44CF9590006BF252F707', accessKeySecret: 'OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV'});
ofuda.signHttpRequest(request); // appends a hmac authorisation header to the request 

(Coming soon)

Use as a client is illustrated below.

var http = require('http');
var Ofuda = require('ofuda');
var ofuda = new Ofuda({headerPrefix:'Amz', hash: 'sha1', serviceLabel: 'AWS', debug: true});
var credentials = {accessKeyId: '44CF9590006BF252F707', accessKeySecret: 'OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV'};
http_options = {
    host: 'localhost',
    port: 8080,
    path: '/notify',
    method: 'PUT',
    headers: {
        'Content-Type': 'application/json',
        'Content-MD5': 'ee930827ccb58cd846ca31af5faa3634'
signedOptions = ofuda.signHttpRequest(credentials, http_options);
var req = http.request(signedOptions, function(res) {
    console.log('STATUS: ' + res.statusCode);
    console.log('HEADERS: ' + JSON.stringify(res.headers));

Use as a server is as follows.

var http = require('http'),
    Ofuda = require('ofuda');
var ofuda = new Ofuda({headerPrefix:'Amz', hash: 'sha1', serviceLabel: 'AWS', debug: true});
var validateCredentials = function(requestAccessKeyId){
    return {accessKeyId: requestAccessKeyId, accessKeySecret: 'OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV'};
http.createServer(function (requestresponse) {
    if(ofuda.validateHttpRequest(request, validateCredentials)){
    } else {
        response.end('Authorization failed!');
console.log('Server running at');

In lieu of a formal style guide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using grunt.

(Nothing yet)

Copyright (c) 2012 Mark Wolfe
Licensed under the MIT license.