签名生成公式
signature = base64(HMAC-SHA256(secret_key, signingString))其中:
secret_key为创建任务时使用的tokensigningString为签名字符串,按照以下格式构建
签名字符串构建方法
signingString = http_method + "\n" + http_uri + "\n" + canonical_query_string + "\n" + access_key + "\n" + Date + "\n" + signed_headers_string各参数说明:
http_method:HTTP协议中定义的GET、PUT、POST等请求方法,必须使用全大写的形式http_uri:URL中的路径部分,使用标准URL解析从callback_url中提取的路径部分,要求必须以"/"开头,空路径为"/"canonical_query_string:URL中的查询参数部分,使用标准URL解析从callback_url中提取的查询参数部分,如无查询参数则为空字符串access_key:API标识符,固定为"vidu"Date: 请求头中的Date(GMT格式)signed_headers_string: 从请求头中按顺序取出X-HMAC-SIGNED-HEADERS指定的headers,并按以下格式拼接:
请求标头 (Headers)
签名相关的请求头包括:
Date: GMT格式的时间,例如:"Tue, 06 May 2025 12:09:42 GMT"x-request-nonce: 随机字符串,用于防止重放攻击X-HMAC-SIGNED-HEADERS: 签名中使用的头部字段列表,用分号分隔,例如:"Date;x-request-nonce"X-HMAC-SIGNATURE: 最终计算出的签名X-HMAC-ALGORITHM: 签名算法,固定为"hmac-sha256"X-HMAC-ACCESS-KEY: 访问密钥标识符,固定为"vidu"
示例说明
请求示例
生成的签名字符串
使用标准URL解析库解析完整的URL http://127.0.0.1:8080/vidu/callback?name=james&age=36,最终生成的签名字符串为:
注意:
- 字符串末尾有一个换行符
/vidu/callback是使用标准URL解析库从URL中提取的Path部分name=james&age=36是使用标准URL解析库从URL中提取的RawQuery部分- 签名使用的密钥是应用的TokenSecret
Python 实现示例
Go 实现示例
注意事项
- 签名字符串对格式非常敏感,包括换行符和空格
- 使用多行字符串时,必须确保:
- 没有多余的缩进空格
- 每行之间的格式精确
- 字符串末尾有一个换行符
- X-HMAC-SIGNED-HEADERS 指定的头部必须按照指定顺序拼接
- HTTP方法必须使用大写(如POST、GET等)
- URI必须以"/"开头
- 查询参数必须使用原始格式,不要包含"?"
- 签名过程中,系统使用标准URL解析库从callback_url中提取URI和查询参数部分
- 为防止重放攻击,应使用x-request-nonce请求头包含一个随机值(UUID格式)

