Как авторизовать или ограничить пользователя, чтобы он не подписывался и не публиковал конкретную тему в модуле 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
Другие вопросы по тегам