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}" }