从 Zabbix 7.2 版本开始,Zabbix API 的认证机制发生了变化,不再支持通过 URL 参数中的auth直接传递认证令牌进行 API 调用。这一变更是为了提高安全性,防止令牌在 URL 中被轻易截获。
一、问题描述
Zabbix 6.2.6版本API认证是在url请求使用auth进行令牌认证:
data '{"jsonrpc":"2.0","method":"host.get","params":{"output":["hostid"]},"auth":"0424bd59b807674191e7d77572075f33","id":1}'
相关API接口二次开发程序在连接时会出现如下32600报错反馈:
{'jsonrpc': '2.0', 'error': {'code': -32600, 'message': 'Invalid request.', 'data': 'Invalid parameter "/": unexpected parameter "auth".'}, 'id': 1}
提示"auth"参数无效,无法连接。
二、问题分析
1、问题查询
通过问题信息全网搜索+多个AI分析,未找到解决方法。
2、官网检索
在7.2官网文档中,可以看到请求信息中确实已经去除了auth参数

经过反复检索,终于看到一处认证变更说明信息,现截取如下
2.1认证
要在 Zabbix 中访问任何数据,您需要:
-
使用通过 user.login 方法获得的认证令牌。
例如,如果您想以标准 Admin 用户身份登录以获取新的认证令牌,那么一个 JSON 请求可能看起来像这样:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"user.login","params":"username":"Admin","password":"zabbix"},"id":1}'
如果您正确提供了凭据,API 返回的响应应该包含用户认证令牌:
{ "jsonrpc": "2.0", "result": "0424bd59b807674191e7d77572075f33", "id": 1}
2.2授权方法
通过 "Authorization" 头部
所有 API 请求都需要认证或 API 令牌。 您可以使用 "Authorization" 请求头部提供凭据:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer 0424bd59b807674191e7d77572075f33'
"auth" 属性已被弃用:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"host.get","params":{"output":["hostid"]},"auth":"0424bd59b807674191e7d77572075f33","id":1}'
三、实战请求代码样例
获取主机信息代码样例
现在您有一个有效的用户认证令牌,可以用来访问 Zabbix 中的数据。例如,您可以使用 host.get 方法来检索所有配置的 hosts 的 ID、主机名和接口:
请求:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
--header 'Content-Type: application/json-rpc' \
--data @data.json
data.json
是一个包含 JSON 查询的文件。您可以在 --data
参数中直接传递查询,而不是使用文件。
data.json
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
] },
"id": 2
}
响应对象将包含有关主机的请求数据:
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Zabbix server",
"interfaces": [
{
"interfaceid": "1",
"ip": "127.0.0.1"
}
]
}
],
"id": 2
}
按要求将用户认证令牌写入"Authorization" 请求头部,实测试验证通过,请求恢复正常应答。