aaaforrest

2.8.0 • Public • Published

AAAforREST

An HTTP reverse proxy to bring authentication, authorization and accounting to RESTful applications.

Contact: aurelien.benel@utt.fr

Home page: https://github.com/Hypertopic/AAAforREST

Features

  • Authentication
    • Frontend
      • HTTP basic
      • Cookie authentication
    • Backend
      • LDAP users
      • CouchDB users
  • Authorization
    • POST, PUT, DELETE require authenticated users
    • more specific rules can be implemented on the backend
  • Accounting
    • Log format can be configured

Implementing your own reverse proxy

featuring basic forwarding

const app = require('express')();
const AAAforREST = require('aaaforrest');

const settings = {
  port: '80',
  service: 'https://my-bluemix.cloudant.com',
  path: '/cuicui/_design/app/_rewrite',
};

let aaa = new AAAforREST(settings);

app.route('*')
  .all(
    aaa.forward({preserveCredentials: true, preserveHost: false})
  );

app.listen(settings.port, function() {
  console.log(`Test it on http://localhost:${settings.port}/`)
});

featuring basic authentication based on LDAP

const app = require('express')();
const AAAforREST = require('aaaforrest');

const settings = {
  port: '80',
  service: 'https://my-bluemix.cloudant.com',
  path: '/cuicui/_design/app/_rewrite',
  ldap: {
    url: 'ldap://ldap.forumsys.com',
    searchBase: 'dc=example,dc=com',
    searchFilter: '(uId={{username}})'
  },
  secret: {
    name: 'apikey-ff9900',
    password: '1337'
  },
};

let aaa = new AAAforREST(settings);

app.route('*')
  .get(
    aaa.forward({preserveCredentials: false, preserveHost: false})
  )
  .all(
    aaa.parseAuthenticationHeader,
    aaa.checkAuthenticationOnLDAP,
    aaa.continueIfAuthentified,
    aaa.updateHeaders,
    aaa.forward({preserveCredentials: false, preserveHost: false})
  );

app.listen(settings.port, function() {
  console.log(`Test it on http://localhost:${settings.port}/`)
});

featuring session authentication based on LDAP

const app = require('express')();
const AAAforREST = require('aaaforrest');
const bodyParser = require('body-parser');
const session = require('express-session');
const cors = require('cors');

const settings = {
  port: '80',
  service: 'https://my-bluemix.cloudant.com',
  path: '/cuicui/_design/app/_rewrite',
  ldap: {
    url: 'ldap://ldap.forumsys.com',
    searchBase: 'dc=example,dc=com',
    searchFilter: '(uId={{username}})'
  },
  secret: {
    name: 'apikey-ff9900',
    password: '1337'
  },
  cors: {
    credentials: true,
    origin: 'http://cuicui.local:3000'
  },
  session: {
    secret: 'TO_BE_CHANGED',
    resave: false,
    saveUninitialized: false,
    unset: 'destroy'
  }
};

let getSession = session(settings.session);

let destroySession = function (request, response, next) {
  request.session = null;
  next();
}

let aaa = new AAAforREST(settings);

app.route('/_session')
  .post(
    cors(settings.cors),
    bodyParser.json({extended: false}),
    aaa.parseAuthenticationForm,
    aaa.checkAuthenticationOnLDAP,
    aaa.continueIfAuthentified,
    getSession,
    aaa.storeInSession,
    aaa.sendUser
  )
  .get(
    cors(settings.cors),
    getSession,
    aaa.loadInSession,
    aaa.sendUser
  )
  .delete(
    cors(settings.cors),
    getSession,
    destroySession,
    aaa.sendUser
  )
  .options(
    cors(settings.cors),
  );

app.route('*')
  .get(
    aaa.forward({preserveCredentials: false, preserveHost: false})
  )
  .options(
    aaa.forward({preserveCredentials: false, preserveHost: false})
  )
  .all(
    getSession,
    aaa.loadInSession,
    aaa.continueIfAuthentified,
    aaa.updateHeaders,
    aaa.forward({preserveCredentials: false, preserveHost: false})
  );

app.listen(settings.port, function() {
  console.log(`Test it on http://localhost:${settings.port}/`)
});

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
2.8.02latest

Version History

VersionDownloads (Last 7 Days)Published
2.8.02
2.7.20
2.7.10
2.7.00
2.6.10
2.5.10
2.5.00
2.4.21
2.4.10
2.4.00
2.3.00
2.2.00
2.1.10
2.1.00

Package Sidebar

Install

npm i aaaforrest

Weekly Downloads

1

Version

2.8.0

License

none

Unpacked Size

43.2 kB

Total Files

5

Last publish

Collaborators

  • benel