事件回调签名计算

智能点播平台 VOD

  • 功能发布记录
  • 短视频SDK
    • 短视频SDK
  • 产品描述
    • 优势
    • 简介
    • 输入格式
    • 应用场景
    • 核心概念
  • 典型实践
    • Web端直传实践
    • 视频转码、添加水印、下载查看操作指引
    • 回调解决方案
    • VOD和BOS的关系
    • VOD版权保护
    • STS和VOD、BOS的关系
  • 播放器SDK
    • 播放器SDK文档
  • 操作指南
    • 智能集锦
    • 统计分析
    • 全局设置
    • 工作流管理
    • 开通VOD
    • 媒资管理
    • 模版管理
      • 音频转码模版
      • 抽帧模板
      • 视频转码模板
      • 智感超清(音画质重生)模板
      • 转自适应码流模版
      • 水印模板
      • 模版概览
      • 智能审核模板
      • 智能分析模板
    • 视频生成
      • 特效视频
  • 服务等级协议SLA
    • VOD服务等级协议SLA
  • API参考
    • 数据结构
    • API在线调试
    • 公共请求头与响应头
    • 错误返回
    • 使用须知
    • 概述
    • 媒资上传相关接口
      • 完成上传
      • 申请上传
      • 拉取上传
      • 申请媒资封面上传
      • 完成媒资封面上传
    • 媒资管理相关接口
      • 修改媒资信息
      • 删除媒资的部分文件
      • 解封媒资
      • 搜索媒资
      • 删除媒资
      • 查询媒资详情
      • 封禁媒资
    • 智能集锦相关接口
      • 剧本管理
      • 项目管理
      • 集锦任务
    • 视频生成相关接口
      • 图生视频
      • 特效视频
      • 视频延长
      • 文生视频
    • 媒资处理相关接口
      • 视频云剪辑
      • 媒资通用处理
      • 提取数字水印
    • 任务管理相关接口
      • 查询任务列表
      • 查询任务详情
    • 事件回调相关接口
      • 修改事件回调设置
      • 查询事件回调设置
  • 常见问题
    • 计费类问题
    • 视频上传
    • 常见问题总览
    • 安全类问题
    • 视频转码
    • 视频播放
    • 媒资处理
  • 产品定价
    • 计费概述
    • 特殊情况说明
    • 计费项说明
      • 视频生成计费项
      • 存储计费项
      • 视频处理与生产计费项
      • 媒体版权保护计费项
      • 智能集锦计费项
      • 音视频转码计费项
      • 音视频质量检测计费项
      • 分发计费项
      • 智感超清(音画质重生)计费项
  • 开发指南
    • 事件回调
      • 事件回调综述
      • 媒资AI审核完成
      • 媒资拉取上传完成
      • 媒资上传完成
      • 事件回调接入教程
      • 媒资转码完成
      • 媒资AI分析完成
      • 视频生成完成
      • 媒资抽帧完成
      • 事件回调签名计算
      • 视频云剪辑任务状态变更
    • 服务端上传
      • 服务端上传指引
    • 客户端上传
      • Web 端上传 SDK
      • HarmonyOS NEXT 上传 SDK
        • SDK集成
        • 快速开始
        • 版本更新记录
      • Android 上传 SDK
        • SDK集成
        • 快速开始
        • 版本更新记录
所有文档
menu
没有找到结果,请重新输入

智能点播平台 VOD

  • 功能发布记录
  • 短视频SDK
    • 短视频SDK
  • 产品描述
    • 优势
    • 简介
    • 输入格式
    • 应用场景
    • 核心概念
  • 典型实践
    • Web端直传实践
    • 视频转码、添加水印、下载查看操作指引
    • 回调解决方案
    • VOD和BOS的关系
    • VOD版权保护
    • STS和VOD、BOS的关系
  • 播放器SDK
    • 播放器SDK文档
  • 操作指南
    • 智能集锦
    • 统计分析
    • 全局设置
    • 工作流管理
    • 开通VOD
    • 媒资管理
    • 模版管理
      • 音频转码模版
      • 抽帧模板
      • 视频转码模板
      • 智感超清(音画质重生)模板
      • 转自适应码流模版
      • 水印模板
      • 模版概览
      • 智能审核模板
      • 智能分析模板
    • 视频生成
      • 特效视频
  • 服务等级协议SLA
    • VOD服务等级协议SLA
  • API参考
    • 数据结构
    • API在线调试
    • 公共请求头与响应头
    • 错误返回
    • 使用须知
    • 概述
    • 媒资上传相关接口
      • 完成上传
      • 申请上传
      • 拉取上传
      • 申请媒资封面上传
      • 完成媒资封面上传
    • 媒资管理相关接口
      • 修改媒资信息
      • 删除媒资的部分文件
      • 解封媒资
      • 搜索媒资
      • 删除媒资
      • 查询媒资详情
      • 封禁媒资
    • 智能集锦相关接口
      • 剧本管理
      • 项目管理
      • 集锦任务
    • 视频生成相关接口
      • 图生视频
      • 特效视频
      • 视频延长
      • 文生视频
    • 媒资处理相关接口
      • 视频云剪辑
      • 媒资通用处理
      • 提取数字水印
    • 任务管理相关接口
      • 查询任务列表
      • 查询任务详情
    • 事件回调相关接口
      • 修改事件回调设置
      • 查询事件回调设置
  • 常见问题
    • 计费类问题
    • 视频上传
    • 常见问题总览
    • 安全类问题
    • 视频转码
    • 视频播放
    • 媒资处理
  • 产品定价
    • 计费概述
    • 特殊情况说明
    • 计费项说明
      • 视频生成计费项
      • 存储计费项
      • 视频处理与生产计费项
      • 媒体版权保护计费项
      • 智能集锦计费项
      • 音视频转码计费项
      • 音视频质量检测计费项
      • 分发计费项
      • 智感超清(音画质重生)计费项
  • 开发指南
    • 事件回调
      • 事件回调综述
      • 媒资AI审核完成
      • 媒资拉取上传完成
      • 媒资上传完成
      • 事件回调接入教程
      • 媒资转码完成
      • 媒资AI分析完成
      • 视频生成完成
      • 媒资抽帧完成
      • 事件回调签名计算
      • 视频云剪辑任务状态变更
    • 服务端上传
      • 服务端上传指引
    • 客户端上传
      • Web 端上传 SDK
      • HarmonyOS NEXT 上传 SDK
        • SDK集成
        • 快速开始
        • 版本更新记录
      • Android 上传 SDK
        • SDK集成
        • 快速开始
        • 版本更新记录
  • 文档中心
  • arrow
  • 智能点播平台VOD
  • arrow
  • 开发指南
  • arrow
  • 事件回调
  • arrow
  • 事件回调签名计算

事件回调签名计算

更新时间:2025-08-22

如果在事件回调设置中开启了签名设置,则VOD服务会在发送事件回调请求时,附加特定的header内容,开发者可以在回调接收端验证签名的合法性,如果通过签名算法计算的签名结果与请求header中的签名一致,则可以认为事件回调VOD服务发出的,否则可能是第三方恶意请求,开发者可以拒绝请求。

以下用一个例子来说明。

某用户在VOD开启了回调签名,签名密钥为qwer1234,事件回调的URL为http://www.example.com/callback ,该用户的百度云账号ID为e95e33a028bd49dbb3e08f068dc975d5。

VOD服务在发送的一个媒资上传完成事件回调请求大致如下:

Http
1POST /callback HTTP/1.1
2accept: */*
3content-length: 594
4host: www.example.com
5user-agent: AHC/2.0
6vod-callback-auth-timestamp: 1731317262714
7vod-callback-auth-token: 900dcab1a5227dbb47a0893d85c9447490c4d2ba6d13ca881886372e9ec2a8aa
8vod-callback-auth-user: e95e33a028bd49dbb3e08f068dc975d5
9
10{"eventId":"evt-ekkti4ep2mk0gedf","eventType":"MEDIA_UPLOAD_COMPLETE","eventTime":"2024-11-11T09:27:41Z","mediaUploadCompleteEvent":{"mediaId":"mda-ekkt369ihnhei80d","name":"test1","description":"","mediaType":"video","banSt
11atus":"NORMAL","createTime":"2024-11-11T09:27:41Z","source":{"sourceType":"UPLOAD","sourceUrl":"https://vod.example.com/mda-ekkt369ihnhei80d/test1.mp4"}}}

可以注意到,有3个特殊的header:

  • vod-callback-auth-user:用户百度云账号ID
  • vod-callback-auth-timestamp:VOD发送回调时的时间戳
  • vod-callback-auth-token:VOD计算的签名结果值

vod-callback-auth-token的计算方法如下:

Plain Text
1content = CONCAT('POST;', {callbackUrl}, ';', {body}, ';', {vod-callback-auth-timestamp}, ';', {vod-callback-auth-user})
2vod-callback-auth-token = SHA256-HEX(token, content)

content是一个字符串拼接的结果,{callbackUrl}是回调地址,{body}是回调请求body进行json压缩后的字符串,{vod-callback-auth-timestamp}和{vod-callback-auth-user}是特定请求头, SHA256-HEX是一个Hash算法,详见rfc4868。

为了便于用户开发,下面将给出Java实现的计算vod-callback-auth-token的方法,其他语言版本可以自行实现。

Java
1import java.nio.charset.Charset;
2import java.nio.charset.StandardCharsets;
3import java.security.InvalidKeyException;
4import java.security.NoSuchAlgorithmException;
5import javax.crypto.Mac;
6import javax.crypto.spec.SecretKeySpec;
7import org.apache.commons.codec.binary.Hex;
8
9public class VodEventCallbackTokenUtil {
10
11    private static final String HMAC_SHA256 = "HmacSHA256";
12    private static final Charset CHARSET_UTF8 = StandardCharsets.UTF_8;
13
14    public static String calculateToken(String signKey, String input) {
15        byte[] secretKeyBytes = signKey.getBytes(CHARSET_UTF8);
16        byte[] inputBytes = input.getBytes(CHARSET_UTF8);
17        SecretKeySpec secretKeySpec = new SecretKeySpec(secretKeyBytes, HMAC_SHA256);
18        try {
19            Mac mac = Mac.getInstance(secretKeySpec.getAlgorithm());
20            mac.init(secretKeySpec);
21            mac.update(inputBytes, 0, inputBytes.length);
22            byte[] macBytes = mac.doFinal();
23            return String.valueOf(Hex.encodeHex(macBytes));
24        } catch (NoSuchAlgorithmException | InvalidKeyException ex) {
25            throw new RuntimeException(ex);
26        }
27    }
28
29    public static void main(String[] args) {
30        String callbackUrl = "http://www.example.com/callback";
31        String signKey = "qwer1234";
32        String userId = "e95e33a028bd49dbb3e08f068dc975d5";
33        String timestamp = "1731317262714";
34        String body = "{\"eventId\":\"evt-ekkti4ep2mk0gedf\",\"eventType\":\"MEDIA_UPLOAD_COMPLETE\",\"eventTime\":\"2024-11-11T09:27:41Z\","
35                      + "\"mediaUploadCompleteEvent\":{\"mediaId\":\"mda-ekkt369ihnhei80d\",\"name\":\"test1\",\"description\":\"\",\"mediaType\":\"video\",\"banSt\n"
36                      + "atus\":\"NORMAL\",\"createTime\":\"2024-11-11T09:27:41Z\",\"source\":{\"sourceType\":\"UPLOAD\",\"sourceUrl\":\"https://vod.example"
37                      + ".com/mda-ekkt369ihnhei80d/test1.mp4\"}}}";
38        String content = String.format("POST;%s;%s;%s;%s", callbackUrl, body, timestamp, userId);
39        String auth = calculateToken(signKey, content);
40        System.out.println(auth); // 输出结果 900dcab1a5227dbb47a0893d85c9447490c4d2ba6d13ca881886372e9ec2a8aa
41    }
42
43}

上一篇
媒资抽帧完成
下一篇
视频云剪辑任务状态变更