EMQX has several auth modules. We use the Mnesia auth module with HTTP API client id provisioning. They also have NanoMQ, a MQTT broker for IoT edge (on resource constrained devices). The documentation is also quite decent compared to this.
https://www.emqx.io/docs/en/latest/access-control/authn/auth...
They have a community edition available as a docker image or packages for popular Linux distros.