A type `Authenticator` satisfies `is_authenticator` concept if it satisifes the requirements listed below.
[table
[[operation] [type] [arguments]]
[
[```a.async_auth(step, data, h)```]
[`void`]
[
[*`step`] is [reflink2 auth_step_e async_mqtt5::auth_step_e] that specifies current authentication stage.
[*`data`] is `std::string`, server's authentication data.
[*`h`] is [asioreflink any_completion_handler any_completion_handler] with signature `void(__ERROR_CODE__ ec, std::string client_data)`. If `ec` is non-trivial, authentication is aborted.