Это можно реализовать, отключив клиент при попытке опубликовать / подписаться на недопустимую тему.
Это означает использование авторизации вместо аутентификации для обеспечения соблюдения вашей политики. Аутентификация может быть выполнена только с использованием параметров, которые доступны в сообщении MQTT-соединения, например идентификатор клиента, пароль.
Поэтому для этого необходимо настроить обработчик событий ConnectionValidator
при запуске сервера. Он может записывать идентификатор клиента и пароль, с которыми клиент пытается соединиться, и всегда разрешать установление соединения.
Обработчик события ApplicationMessageReceived
будет вызываться, когда клиент публикует / подписывается на тему. Этот обработчик событий может проверить идентификатор клиента и пароль, которые были переданы, когда клиент подключился к клиенту в вашей базе данных (используя тему, как вам нужно). Если путь, идентификатор клиента и пароль недействительны, вам необходимо явно отключить клиента.
Клиент может быть явно отключен, найдя клиента в списке всех сеансов на сервере, используя mqttServer.GetClientSessionsStatus()
. Затем вызовите DisconnectAsync()
в сеансе клиента.