ejabberd: AccessRules: У учетной записи нет прав на выполнение операции

Я пытаюсь следовать разрешениям API | Документы ejabberd и Настройка ejabberd | Документы ejabberd.

но при попытке зарегистрировать пользователя:

# curl -sk -d '{"user":"test", "password":"testing", "host":"localhost"}' -H 'Content-Type: application/json' https://localhost:5443/api/register 

Я получаю следующее в ejabberd.log:

# tail -2 ./home/ejabberd/logs/ejabberd.log 
2019-10-04 21:41:47.079 [info] <0.663.0>@mod_http_api:log:509 API call register [{<<"user">>,<<"test">>},{<<"password">>,<<"testing">>},{<<"host">>,<<"localhost">>}] from ::ffff:172.19.0.1:53740
2019-10-04 21:41:47.079 [info] <0.521.0>@ejabberd_listener:accept:256 (<0.663.0>) Accepted connection [::ffff:172.19.0.1]:53740 -> [::ffff:172.19.0.6]:5443
# 

ejabberd.yml' acl&api_permissions блоки:

acl:
  local:
    user_regexp: ""
  loopback:
    ip:
      - 127.0.0.0/8
      - ::1/128
      - ::FFFF:127.0.0.1/128
  admin:
    user:
      - "admin@localhost"
    ip:
      - ::/0
      - ::FFFF:10.0.0.0/8
      - ::FFFF:172.16.0.0/12
      - ::FFFF:172.19.0.0/12
      - ::FFFF:192.168.0.0/16

&

api_permissions:
  "console commands":
    from:
      - ejabberd_ctl
    who: all
    what: "*"
  "admin access":
    who: 
      access:
        allow:
          acl: loopback
          acl: admin
          ip:
            - ::/0
            - ::FFFF:10.0.0.0/8
            - ::FFFF:172.16.0.0/12
            - ::FFFF:172.19.0.0/12
            - ::FFFF:192.168.0.0/16
      oauth:
        scope: "ejabberd:admin"
        access:
          allow:
            acl: loopback
            acl: admin
    what:
      - "*"
      - "!stop"
      - "!start"
  "public commands":
    who:
      ip: 127.0.0.1/8
    what:
      - status
      - connected_users_number

Пожалуйста, порекомендуйте.


person alexus    schedule 04.10.2019    source источник


Ответы (2)


Я добавил свой ip/диапазон в блок admin И loopback:

acl:
  local:
    user_regexp: ""
  loopback:
    ip:
      - 127.0.0.0/8
      - ::1/128
      - ::FFFF:127.0.0.1/128
      - ::FFFF:172.19.0.0/16
  admin:
    user:
      - "admin@localhost"
    ip:
      - ::FFFF:172.19.0.0/16

и ошибка ушла)

person alexus    schedule 11.10.2019

С этой минимальной конфигурацией:

listen:
  -
    port: 5443
    ip: "::"
    module: ejabberd_http
    tls: true
    request_handlers:
      "/api": mod_http_api

acl:
  admin:
    ip:
      - "127.0.0.1"

api_permissions:
  "admin commands":
    who: admin
    what:
      - register

Если я выполню это на машине 127.0.0.1, это сработает:

$ curl -sk -d '{"user":"test", "password":"testing", "host":"localhost"}' -H 'Content-Type: application/json' https://localhost:5443/api/register

"User test@localhost successfully registered"
person Badlop    schedule 07.10.2019
comment
Если этот вопрос решен, отметьте его как решенный. Как только это будет решено, я обращу внимание на новый. - person Badlop; 07.10.2019
comment
спасибо, что уделили внимание моему вопросу(ам), я действительно ценю это! теперь мой вопрос решен? не совсем ... ближе всего к решению вопроса я когда-либо подошел, когда я избавился от блока api_permissions' admin access: who и заменил его на who: all, но я не совсем доволен результатом, так как я не могу ограничить сети (откуда приходят запросы (не оставляя открытыми для интернета)) - person alexus; 08.10.2019
comment
Небольшой пример, который я предоставил, ограничивает регистрацию, разрешая ее только для IP-адреса 127.0.0.1. Вы пробовали этот пример? Работает ли он так, как задумано? Если да, то вы можете добавить еще несколько строк ip с сетями, которые вы хотите разрешить, верно? - person Badlop; 11.10.2019