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

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

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

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

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


person Murugesan Nallathambi    schedule 15.05.2019    source источник


Ответы (1)


Модуль mod_mqtt предоставляет два варианта контроля доступа: access_subscribe и access_publish. Первый можно использовать для ограничения доступа для подписчиков, а второй — для ограничения доступа для издателей. Оба допускают сопоставление filter: rule, где filter — фильтр темы MQTT, а rule — стандартное правило доступа ejabberd.

Например, предположим, что [email protected] может публиковаться только в теме "/foo/bar/" и ее подтемах, а [email protected] может подписываться только на эту тему и ее подтемы. Конфигурация будет выглядеть примерно так:

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
person user2610053    schedule 17.05.2019
comment
Спасибо. Этот ответ почти соответствует моим ожиданиям. Еще одно сомнение. У нас будет миллион пользователей, и пользователь будет динамическим. Поэтому мы не можем добавить имя пользователя в файл yml. Как справиться с этим сценарием динамического добавления пользователей? Есть ли у ejabberD расширения, чтобы я мог проверить идентификатор jabber пользователя и контролировать доступ к публикации и подписке? - person Murugesan Nallathambi; 28.05.2019