全网首个详细案例:zabbix7.2 对比老版本API认证方法更新适配实战说明

从 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 中访问任何数据,您需要:

  • 使用现有的 API token(在 Zabbix 前端创建或使用 Token API 创建);

  • 使用通过 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" 请求头部,实测试验证通过,请求恢复正常应答。

相关推荐
FIT2CLOUD飞致云9 分钟前
操作教程丨通过1Panel快速安装Zabbix,搭建企业级监控系统
运维·服务器·开源·zabbix·监控·1panel
Ghost Face...44 分钟前
Docker实战:从安装到多容器编排指南
运维·docker·容器
此生只爱蛋1 小时前
【Linux】正/反向代理
linux·运维·服务器
qq_5470261791 小时前
Linux 基础
linux·运维·arm开发
废春啊1 小时前
前端工程化
运维·服务器·前端
我只会发热2 小时前
Ubuntu 20.04.6 根目录扩容(图文详解)
linux·运维·ubuntu
爱潜水的小L2 小时前
自学嵌入式day34,ipc进程间通信
linux·运维·服务器
zhuzewennamoamtf2 小时前
Linux I2C设备驱动
linux·运维·服务器
TSAI2 小时前
Docker Swarm 集群部署 Eureka 服务注册中心:高可用微服务架构的基石
spring cloud·docker
不惑_2 小时前
Windows 安装 Docker 和 Docker Compose 完整教程
windows·docker·容器