0

我试图在没有身份验证的情况下访问 ejabberd rest api,但总是得到403 Forbidden这个 body 的响应:

{
    "status": "error",
    "code": 32,
    "message": "AccessRules: Account does not have the right to perform the operation."
}

我无法在/api/status端点上获得 OK 响应,这是来自 127.0.0.1 的所有用户都应该能够使用的命令(请参阅api_permissionsejabberd.yml 中的“公共命令”部分)。

这是请求详细信息(通过 Insomnia REST 客户端):

> POST /api/status HTTP/1.1
> User-Agent: insomnia/5.1.0
> Host: localhost:5280
> Accept: */*
> Accept-Encoding: deflate, gzip
> Content-Type: application/json
> Content-Length: 2
| {}

Ejabberd 版本是 17.04,从下载的 deb 包安装并以用户身份在 Debian 8.8 (jessie) x86_64 上运行ejabberd。安装后,我只是添加了主机“localhost”,为 localhost 注册了一个新用户“admin”并将其添加到 ACL。

我对 ejabberd.yml 所做的唯一更改:

hosts:
  - "localhost"
acl:
  admin:
    user:
      - "admin": "localhost"

否则,我可以访问运行良好的 webadmin 界面......
我该怎么做才能获得 200 OK 响应?

4

1 回答 1

3

好的,我找到了解决方案。就像消息说的那样,这是一个权限问题。
这是默认配置:

api_permissions:
## ...
  "public commands":
    who:
      - ip: "127.0.0.1/8"
    what:
      - "status"
      - "connected_users_number"

不允许在有或没有身份验证的情况下访问statusconnected_users_number命令(我三重检查)。

对于无身份验证用法,请使用-all

  "public commands":
    who:
## This allows to use both commands without having to authenticate
      - all
    what:
      - "status"
      - "connected_users_number"

如果您想要求有效用户(具有基本身份验证),请替换- all- access: local.

  "public commands":
    who:
## This allows to use both commands with basic authentication for local users
      - access: local
    what:
      - "status"
      - "connected_users_number"
于 2017-05-31T17:30:36.863 回答