【问题标题】:400 bad request error while calling ejabberd api调用 ejabberd api 时出现 400 错误请求错误
【发布时间】:2017-04-24 15:31:08
【问题描述】:

我在调用 ejabberd 的“/api/get_roster”端点时收到 400 错误请求错误。在请求 oauth 令牌时,我将“get_roster”保留在范围内。

400 bad request error in ejabberd

我猜是权限有问题。这是我的配置文件:

https://www.dropbox.com/s/his89bx39qhvr1h/ejabberd2.yml?dl=0

我已尝试遵循官方文档。根据 API 权限指南,我还尝试添加以下属性:

api_permissions:
  - "Admin access":
    - who:
      - admin
    - what
      - "\*"
      - "!stop"

但没有任何变化。我有以下问题:

  1. 我在这里做错了什么?
  2. 什么是可能的范围?

【问题讨论】:

  • 根据文档,注意::要使用 get_roster 范围,您需要启用 mod_admin_extra。否则,命令是未知的,你会得到一个 invalid_scope 错误。
  • 我在 yml 文件的模块部分提到了 mod_admin_extra。我没有收到 invalid_scope 错误。我能够获得令牌。只是当我在对 API Endpoint 的 POST 调用中使用该令牌时,它显示 400 bad request。
  • 您使用的是什么版本的 ejabberd?
  • 我使用的是 ejabberd 16.01。

标签: ejabberd ejabberd-api


【解决方案1】:

您的请求应包含如下授权标头:

curl -v -X POST -H "Authorization: Bearer <Oauth_token>" http://localhost:5280/api/get_roster -d '[]'

【讨论】:

【解决方案2】:

您可以参考此link 了解更多详情。如果您以管理员身份访问,您可以使用commands_admin_access 规则提供对 api 命令的访问权限,并指定您要访问的命令,如下所示:

commands:
  - add_commands:
    - get_roster
commands_admin_access: configure

【讨论】:

    【解决方案3】:

    您使用的是非常旧的 Ejabberd 版本。最新的是 17.04,从 16.01 开始,API 权限框架有很多变化。 api_permission 相关配置来自 16.12 版本。详情请参考this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-13
      • 2017-09-06
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多