如何通过 HTTP 访问 ejabberd 管理 api?

Posted

技术标签:

【中文标题】如何通过 HTTP 访问 ejabberd 管理 api?【英文标题】:How to access ejabberd admin api via HTTP? 【发布时间】:2016-09-01 01:15:27 【问题描述】:

我读到了文档https://docs.ejabberd.im/admin/api/

我想知道如何通过 HTTP 访问这些 API。我尝试访问,但总是 404。

【问题讨论】:

【参考方案1】:

在 ejabberd.yml 文件中启用 ejabberd_xmlrpc 取消注释以下行-

## To handle XML-RPC requests that provide admin credentials:
  ##
  ## - 
  ##   port: 4560
  ##   module: ejabberd_xmlrpc
  ##   maxsessions: 10
  ##   timeout: 5000
  ##   access_commands:
  ##     xmlrpc:
  ##       commands: all
  ##   options: []

所有 XMLRPC 都发送到以下 URL:http://host:4560/。 for more detail check here

【讨论】:

但管理 API 仍然无法正常工作。你知道如何通过 JSON 启用管理 API 吗? 如果你能提供激活API的步骤就太好了。【参考方案2】:

在你的 ejabberd.yml 中你可以找到这样的配置

- 
port: 5280
module: ejabberd_http
request_handlers:
  "/websocket": ejabberd_http_ws

启用 api 和 oauth,

- 
port: 5280
module: ejabberd_http
request_handlers:
  "/websocket": ejabberd_http_ws
  "/api": mod_http_api
  "/oauth": ejabberd_oauth

我们正在使 api 能够访问其他编程语言(JSON 请求和响应)

我们正在启用 oauth 来引发 api 请求并获得响应(没有它,如果我们访问 /api,我们只会得到 401-unauthorized 错误)

完成此配置后,在浏览器中发出 http 请求。网址必须是

http://localhost:5280/oauth/authorization_token?response_type=token&client_id=Client1&scope=get_roster+connected_users

get_roster 和 connected_users 是 API 端点 Clinet1 是您可以指定的名称 response_type 必须始终是令牌

一旦你点击它,它会呈现一个这样的屏幕,

输入您的管理员详细信息并点击接受

然后在url中你会发现类似这样的变化

http://localhost:5280/oauth/authorization_token?access_token=Ra9W9aRgeoUgIpN0P68SIGDaatDIVcgB&token_type=bearer&expires_in=3600&scope=get_roster%20connected_users&state=

您可以在那里看到一个访问令牌 copyit 并执行 curl 以获取已连接的用户。 (在终端中输入此命令)

curl -v POST -H "X-Admin: true" -H "Authorization: Bearer Ra9W9aRgeoUgIpN0P68SIGDaatDIVcgB" http://localhost:5280/api/connected_users -d '[]'

您将收到所有已连接用户的 Json 响应。

这就是在 ejabberd 中进行 API 调用的方式。希望这会有所帮助:)

【讨论】:

我需要在 php 中编写一个后端作业以将新用户从另一个应用程序注册到 ejabberd,我如何绕过授权请求屏幕以通过代码实现它? 使用外部认证方式并遵循doc 谢谢!这就是我想要的。 @SiruiZhuang 我猜你忘了选择这个作为答案;)

以上是关于如何通过 HTTP 访问 ejabberd 管理 api?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ejabberd 中设置用户密码? [关闭]

ejabberd - 通过 API 连接两个用户

Ejabberd 限制用户注册权限

Ubuntu安装ejabberd xmpp服务器

如何在 ejabberd 服务器中启用流管理?

Ejabberd 如何将新用户添加到名册