In our previous post EMQX 5.x HTTP password authentication server minimal example using NodeJS we provided a complete example of how to implement EMQX HTTP authentication.
This post provides an extension to our previous HTTP auth by adding a Koa router (i.e. a HTTP endpoint / URL) to provide ACL authentication, i.e. allow or deny topic level access with custom logic.
router.post('/emqx/acl', async ctx => { const body = ctx.request.body; console.log(body) // TODO: This example always returns true // You need to implement your authentication logic ctx.body = { result: "allow", }; });
Add that code before app.use(router.routes());
in the script from EMQX 5.x HTTP password authentication server minimal example using NodeJS.
My recommended Authorization configuration body which you can set in the EMQX dashboard is
{ "action": "${action}", "client_id": "${clientid}", "ip": "${peerhost}", "topic": "${topic}", "username": "${username}" }