Как авторизовать или ограничить пользователя, чтобы он не подписывался и не публиковал конкретную тему в модуле ejabberd MQTT?
Я использую ejabberd 19.02 для связи MQTT между клиентом. Я могу аутентифицировать пользователя, используя "внешний" метод аутентификации - просто проверяя имя пользователя и пароль.
У меня также есть требование, чтобы один пользователь мог публиковать одну тему, а другой пользователь не может публиковать эту тему. То же самое для подписки. Я считаю, что это авторизация или контроль доступа. Как добиться выше на сервере ejabberd MQTT?
Я видел конфигурацию "Правила доступа", но, похоже, она не соответствует ограничениям подписки / публикации тем для некоторых пользователей.
Может ли он управляться как Аутентификация - как дать ответственность внешним
1 ответ
Модуль mod_mqtt
предоставляет две опции для контроля доступа: access_subscribe
а также access_publish
, Первый может использоваться для ограничения доступа для подписчиков, а второй может использоваться для ограничения доступа для издателей. Оба принимают сопоставление filter: rule
где filter
фильтр тем MQTT и rule
является стандартным правилом доступа ejabberd.
В качестве примера, скажем user1@domain.tld
может опубликовать только тему "/foo/bar/" и ее подтемы, а user2@domain.tld
может подписаться только на эту тему и ее подтемы. Конфигурация будет выглядеть примерно так:
acl:
...
publisher:
user:
"user1" : "domain.tld"
subscriber:
user:
"user2" : "domain.tld"
modules:
...
mod_mqtt:
access_publish:
"/foo/bar/#":
- allow: publisher
- deny
"#":
- deny
access_subscribe:
"/foo/bar/#":
- allow: subscriber
- deny
"#":
- deny