Openfire 5.1.2 API 使用详解
在 Openfire 5.1.2 上安装启用 REST API 插件 1.12.0 的实测指南,覆盖 Basic 认证配置、用户与会话端点实操、错误码归纳,以及管理台通配豁免导致 302 的排障实录。
Openfire 5.1.2 API 使用详解
目标:在 Openfire 5.1.2 上安装并启用官方 REST API 插件,完成 Basic 认证配置,实测用户管理、会话与聊天室查询等核心端点,并给出一个 5.1.2 环境特有的管理台通配豁免排障实录。全部命令与回显均来自同一台 Ubuntu 24.04 实测服务器。
一、环境信息
| 项目 | 内容 |
|---|---|
| 操作系统 | Ubuntu 24.04.5 LTS |
| Openfire 版本 | 5.1.2(deb 包安装,已完成初始化向导) |
| REST API 插件 | restAPI 1.12.0(2025-07-04 发布,要求 Openfire 5.0.0+) |
| 认证方式 | Basic HTTP Authentication(admin / q1w2e3r4) |
| API 基址 | http://im.example.com:9090/plugins/restapi/v1 |
安装与配置背景见《Ubuntu 24.04 安装 Openfire 5.1.2 指南》与《Openfire 5.1.2 配置参数详解》。
二、安装 REST API 插件
插件是 Openfire 的主要扩展机制(见《Openfire 5.1.2 介绍与选型指南》),REST API 插件提供基于 HTTP 的管理接口。两种安装方式等价:管理台 Plugins 页上传,或直接下载 jar 到插件目录后重启。本文采用后者:
cd /usr/share/openfire/plugins
curl -L -o restAPI.jar "https://www.igniterealtime.org/projects/openfire/plugins/1.12.0/restAPI.jar"
systemctl restart openfire
启动日志确认加载成功:
2026.10.26 10:58:11 INFO [PluginMonitorExec-2]: org.jivesoftware.openfire.container.PluginManager - Successfully loaded plugin 'restapi-1.12.0'.
加载后插件目录展开为 restapi/(含 lib/ 依赖、web/ 管理页与预编译 JSP),管理台 Server → Server Settings 下出现 REST API 配置页。
三、启用与认证配置
配置页路径:http://<服务器>:9090/plugins/restapi/rest-api.jsp(注意 5.1.2 中插件配置页挂在 /plugins/<插件名>/ 前缀下)。表单字段与实测选择:
| 表单项 | 可选值 | 本文实测 |
|---|---|---|
| enabled | true / false | true |
| authtype | basic / secret / custom | basic |
| secret | 文本(首次进入已自动生成随机值) | 保留默认 |
| loggingEnabled | true / false | true(排障期开启) |
三种认证模式互斥,与插件 readme 的说明一致:
- basic:请求头携带 Openfire 管理员账号的 HTTP Basic 凭据(
Authorization: Basic <base64(user:password)>); - secret:请求头直接携带共享密钥(
Authorization: <secret>); - custom:自定义过滤器类名(customAuthFilterClassName)。
保存后插件将配置持久化为系统属性(可在管理台 System Properties 看到):plugin.restapi.enabled、plugin.restapi.httpAuth、plugin.restapi.secret、plugin.restapi.allowedIPs、plugin.restapi.serviceLoggingEnabled。
四、关键排障:一直被 302 重定向到登录页(5.1.2 实录)
启用后用 curl 测试却始终 302:
curl -s -D - -o /dev/null -u admin:q1w2e3r4 http://127.0.0.1:9090/plugins/restapi/v1/status
HTTP/1.1 302 Found
Location: /login.jsp?url=%2Fplugins%2Frestapi%2Fv1%2Fstatus
根因:管理台入口过滤器 AuthCheckFilter 会拦截一切无会话请求;REST API 插件初始化时调用 AuthCheckFilter.addExclude("restapi/*") 注册通配豁免,但 5.1.2 的通配匹配受系统属性 adminConsole.access.allow-wildcards-in-excludes 控制,默认关闭——豁免项 restapi/* 被当作字面字符串,无法匹配任何实际路径,于是请求全部落入登录重定向。
解决:在引导层 /etc/openfire/openfire.xml 的 <jive> 下加入该属性(与 adminConsole 端口配置并列):
<jive>
<adminConsole>
<access>
<allow-wildcards-in-excludes>true</allow-wildcards-in-excludes>
</access>
<port>9090</port>
<securePort>9091</securePort>
</adminConsole>
...
</jive>
重启后验证(无凭据 401、带凭据 200):
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:9090/plugins/restapi/v1/users
401
curl -s -o /dev/null -w "%{http_code}\n" -u admin:q1w2e3r4 http://127.0.0.1:9090/plugins/restapi/v1/users
200
排障定位过程:带管理台会话访问 API 返回 401(说明插件认证过滤器已生效),无会话返回 302(说明被更外层的管理台过滤器拦截);反汇编 xmppserver-5.1.2.jar 中 AuthCheckFilter 可见通配开关逻辑与上述属性名。此属性同样影响其他以通配方式注册豁免的插件。
五、API 实测
以下均以 basic 模式演示。端点清单以插件自带的 readme.html(restapi/ 目录内)为准,本文实测其中核心部分。
5.1 查询用户列表
curl -s -u admin:q1w2e3r4 http://127.0.0.1:9090/plugins/restapi/v1/users
实测回显(默认 XML):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><users><user><username>admin</username><name>Administrator</name><email>admin@example.com</email><properties/></user></users>
Accept: application/json 请求 JSON 输出:
curl -s -u admin:q1w2e3r4 -H "Accept: application/json" \
http://127.0.0.1:9090/plugins/restapi/v1/users
{"users":[{"username":"admin","name":"Administrator","email":"admin@example.com","properties":[]},{"username":"alice","name":"Alice Demo","properties":[]}]}
5.2 创建用户
curl -s -w "\nHTTP:%{http_code}\n" -u admin:q1w2e3r4 -X POST \
-H "Content-Type: application/json" \
-d '{"username":"alice","password":"a1b2c3d4","name":"Alice Demo"}' \
http://127.0.0.1:9090/plugins/restapi/v1/users
实测回显:
HTTP:201
重复创建同名用户返回冲突:
HTTP:409
5.3 查询单个用户
curl -s -u admin:q1w2e3r4 http://127.0.0.1:9090/plugins/restapi/v1/users/alice
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><user><username>alice</username><name>Alice Demo</name><properties/></user>
5.4 会话与聊天室查询
curl -s -u admin:q1w2e3r4 http://127.0.0.1:9090/plugins/restapi/v1/sessions
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><sessions/>
curl -s -u admin:q1w2e3r4 http://127.0.0.1:9090/plugins/restapi/v1/chatrooms
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><chatRooms/>
空环境(无在线会话、无聊天室)时返回空集合,HTTP 200。
5.5 认证失败行为
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:9090/plugins/restapi/v1/users
401
curl -s -o /dev/null -w "%{http_code}\n" -u admin:wrongpw http://127.0.0.1:9090/plugins/restapi/v1/users
401
六、错误码小结(实测归纳)
| 状态码 | 触发条件(实测) |
|---|---|
| 200 | 查询成功(含空集合) |
| 201 | 创建成功(POST /users) |
| 401 | 缺少凭据、凭据错误、未启用插件时的无会话访问 |
| 404 | 路径不存在(如 1.12.0 无 /status 路由) |
| 409 | 创建已存在的用户 |
| 302 → /login.jsp | 管理台通配豁免未生效(见排障一节) |
七、安全建议
- 生产环境优先 secret 或 custom 模式,避免管理员口令在网络中反复传输;启用后到 System Properties 检查
plugin.restapi.secret的实际值; - 用
plugin.restapi.allowedIPs限制调用来源 IP; - 9.0.0 起 REST API 支持 HTTPS 端口(9091)调用,管理台与 API 均建议置于 TLS 之后;
plugin.restapi.serviceLoggingEnabled=true会记录 API 调用,排障期开启、常态关闭。
八、参考
- REST API 插件官方页与下载:https://www.igniterealtime.org/projects/openfire/plugin-archive.jsp?plugin=restAPI
- 插件端点文档随插件分发:restapi/readme.html(安装目录内)
- 站内:《Openfire 5.1.2 介绍与选型指南》、《Ubuntu 24.04 安装 Openfire 5.1.2 指南》、《Openfire 5.1.2 Docker Compose 部署指南》、《Openfire 5.1.2 配置参数详解》