EMQX 5.x HTTP password authentication server using NodeJS
Note: If you also want to implement ACL authorization via HTTP, see our extension to this example: EMQX 5.x HTTP ACL server using NodeJS
This server implements a minimal HTTP authentication server. In this minimal example, it will always allow authentication - you need to implement your own logic to verify passwords. **Note: This server is written for EMQX versionx5.0 and will not work for EMQX 4.x without modification.**See the official documentation on EMQX 5.x HTTP auth for more information.
#!/usr/bin/env node
const router = require('koa-router')();
const koaBody = require('koa-body');
const Koa = require('koa');
const app = new Koa();
app.use(koaBody());
router.post('/emqx/auth', async ctx => {
const body = ctx.request.body;
const username = body.username;
const password = body.password;
// TODO: This example always returns "allow"
// You need to implement your authentication logic
ctx.body = {
result: "allow",
is_superuser: false
};
});
app.use(router.routes());
if (!module.parent) app.listen(19261);
This script is based on our previous post Minimal Koa.JS example with Router & Body parser, hence you can install the dependencies using
npm i --save koa koa-router koa-body
The request body config which you can set in the EMQX dashboard is
{
"client_id": "${clientid}",
"password": "${password}",
"username": "${username}"
}