EMQX 5.x HTTP ACL server using NodeJS
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 bodywhich you can set in the EMQX dashboard is
{
"action": "${action}",
"client_id": "${clientid}",
"ip": "${peerhost}",
"topic": "${topic}",
"username": "${username}"
}