免密图片下载

接口描述

针对采用MQTT消息服务上传的识别结果,其图片被推送到云服务器上。常规的下载图片接口需要AccessKey签名鉴权,但在以下场景中不便使用:

  • 网页嵌入:第三方网页(如车场大屏、客户后台)直接通过 <img> 标签引用图片,浏览器请求无法携带AccessKey签名。
  • 服务端拉取:后端服务批量下载图片,不希望为每次请求生成签名。

免密图片下载接口通过白名单实现鉴权:公司在控制台「系统配置 → 图片免密读」中配置信任的域名白名单(Referer校验)和IP白名单(来源IP校验),并开启总开关后,来自白名单内的请求即可免签名、免AccessKey获取图片。

前提条件:

  1. 在控制台「系统配置 → 图片免密读」中开启总开关。
  2. 添加至少一条白名单规则(域名或IP)。
  3. 白名单规则变更后最长 10 秒生效(服务端缓存刷新周期)。

鉴权机制

中间件采用双通道策略,任一命中即放行:

通道 适用场景 校验方式
IP 白名单 服务端程序拉取(无 Referer 头) 按请求来源 IP 匹配,支持精确 IP 与 CIDR 网段(仅 IPv4)
域名白名单 网页嵌入(浏览器自动带 Referer) 按请求 Referer 头的 host 匹配,支持精确域名与 *.example.com 后缀通配

两个通道均未命中时返回 400(错误码 1003)。

与「下载图片」接口的区别

项目 下载图片 免密图片下载
鉴权 AccessKey + HMAC-SHA1 签名 白名单(Referer / IP)+ 总开关
路径 /openapi/v1/imgs/... /openapi/v1/public/imgs/...
适用场景 服务端有 AK 的程序化调用 网页嵌入、无 AK 的服务端拉取

请求说明

接口ID 协议 方法 PATH
1501 HTTPS GET /openapi/v1/public/${image_path}

PATH参数

参数 类型 说明
image_path string 图片路径(在MQTT推送的消息中会携带图片路径,注意需要base64解码)

请求头

头 必填 说明
Referer 否 浏览器自动携带。网页嵌入场景由此头匹配域名白名单;缺失时走 IP 白名单通道。两个通道都不命中返回 400

请求示例

GET https://open.vzicloud.com/openapi/v1/public/imgs/0c067893-556f140f/20240101/1600914068_167485218_3_0_full.jpg HTTP/1.1
Host: open.vzicloud.com
Referer: https://admin.example.com/dashboard/parking

返回说明

白名单校验通过后,返回一个 302 重定向,重定向地址为图片真正的下载地址(具备有效期,超过有效期不可访问)。

场景 HTTP 响应
白名单命中且图片存在 302 Location: <图片下载地址>
总开关未开启 400 { "code": 1003, "message": "图片免密读未开启" }
IP/Referer 均未命中白名单 400 { "code": 1003, "message": "IP/Referer 未授权" }
设备不属于白名单命中公司 400 { "code": 1003, "message": "无权访问该设备" }
命中公司流量不足 400 { "code": 1010, "message": "流量耗尽,请购买流量" }

流量计费:免密下载的流量计入白名单命中的公司账户,与「下载图片」接口一致。若设备已开通云备份且公司流量耗尽,返回 1010 错误。


白名单配置

白名单通过控制台「系统管理 → 系统配置 → 图片免密读」页面配置,包含:

  1. 总开关:功能级开关。关闭后即使存在白名单规则,所有免密下载请求均被拒绝。
  2. 域名白名单:用于网页嵌入场景(Referer 校验)。
    • 精确匹配:如 admin.example.com
    • 后缀通配:如 *.example.com(匹配任意子域名)
  3. IP 白名单:用于服务端拉取场景(来源 IP 校验,仅 IPv4)。
    • 精确 IP:如 8.8.8.8
    • CIDR 网段:如 192.168.1.0/24

匹配规则

  • 同 host/IP 多公司命中时,取最先创建(id 最小)的规则所属公司。
  • 白名单变更后最长 10 秒生效(服务端缓存刷新周期)。
  • 命中公司的设备归属于校验:白名单命中公司 A,只能访问公司 A 名下的设备图片,不可跨公司访问。

results matching ""

    No results matching ""