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
- Authentication
- Frontend
- HTTP basic
- Cookie authentication
- Backend
- LDAP users
- CouchDB users
- Frontend
- Authorization
- POST, PUT, DELETE require authenticated users
- more specific rules can be implemented on the backend
- Accounting
- Log format can be configured
constapp=require('express')();constAAAforREST=require('aaaforrest');constsettings={port: '80',service: 'https://my-bluemix.cloudant.com',path: '/cuicui/_design/app/_rewrite',};letaaa=newAAAforREST(settings);app.route('*').all(aaa.forward({preserveCredentials: true,preserveHost: false}));app.listen(settings.port,function(){console.log(`Test it on http://localhost:${settings.port}/`)});constapp=require('express')();constAAAforREST=require('aaaforrest');constsettings={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'},};letaaa=newAAAforREST(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}/`)});constapp=require('express')();constAAAforREST=require('aaaforrest');constbodyParser=require('body-parser');constsession=require('express-session');constcors=require('cors');constsettings={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'}};letgetSession=session(settings.session);letdestroySession=function(request,response,next){request.session=null;next();}letaaa=newAAAforREST(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}/`)});