Как авторизовать или ограничить пользователя, чтобы он не подписывался и не публиковал конкретную тему в модуле ejabberd MQTT? - PullRequest
0 голосов
/ 15 мая 2019

Я использую ejabberd 19.02 для связи MQTT между клиентом. Я могу аутентифицировать пользователя, используя «внешний» метод аутентификации - просто проверяя имя пользователя и пароль.

У меня также есть требование, чтобы одному пользователю разрешалось публиковать одну тему, а другому - запрещать публиковать эту тему. То же самое для подписки. Я считаю, что это авторизация или контроль доступа. Как добиться выше на сервере ejabberd MQTT?

Я видел конфигурацию «Правила доступа», но, похоже, она не соответствует ограничениям на подписку / публикацию темы для некоторых пользователей.

Может ли он управляться как аутентификация - например, дать ответственность за внешний

1 Ответ

1 голос
/ 17 мая 2019

Модуль 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
...