调用百度一镜数字人API需通过签名验证,失败返回401错误。首先获取AccessKey与SecretKey,构造待签名字符串时将参数按字典序排列并URL编码,再以SecretKey执行HMAC-SHA256算法生成64位小写签名。最后在HTTP请求头中添加Authorization、X-Bce-Date和X-Bce-Nonce字段,其中nonce需唯一且不超
百度一镜数字人API签名校验:保障接口调用安全与防刷
时间:2026-08-01
浏览:435
文章目录
调用百度一镜数字人API时,签名验证是必经门槛——一旦失败,接口直接返回401错误,生成和推流均无法执行。所有请求必须携带合法签名才能被网关放行,这是第一道防线。

获取Access Key与Secret Key
登录百度智能云控制台,进入「访问管理」→「API密钥管理」,点击「创建Access Key」,系统会自动生成一对密钥:Access Key ID和Secret Access Key。重要提示:Secret Access Key仅在创建时显示一次,【务必立即复制保存,关闭页面后无法再次查看】。
创建完成后,Access Key状态默认为启用,无需额外激活,可直接使用。
构造待签名字符串(stringToSign)
第一步:提取参与签名的请求参数(注意,body中的二进制数据不参与)。必填参数包括version、providerId、timestamp、nonce,另外还需Access Key ID,参数名固定为accessKeyId。
第二步:将这些参数名按字典序升序排列,参数名与值之间用=连接,参数之间用&拼接。示例:accessKeyId=ak123&nonce=abc&providerId=p1×tamp=1721020620&version=v1。
第三步:对拼接后的字符串进行UTF-8编码,再执行URL编码(注意,=、&等特殊字符也要编码,但避免双重编码)。这一步极易被忽略,漏掉URL编码会导致签名不匹配,服务器校验直接失败。
生成SHA-256签名
方法一:以Secret Key作为密钥,对上一步得到的URL编码后字符串执行HMAC-SHA256算法,输出64位小写十六进制字符串。这是最标准的做法。
方法二:使用Python时,直接调用hmac.new(secret_key.encode(), string_to_sign.encode(), hashlib.sha256).hexdigest()。注意secret_key和string_to_sign必须为bytes类型,且【secret_key不能包含空格或换行符】,否则签名会出错。
方法三:如果使用curl命令,签名必须由客户端代码或本地工具预先计算,服务端不会补全。curl无法直接生成签名,需提前算好再填入。
组装HTTP请求头
在HTTP请求Header中添加:Authorization: bce-auth-v1/{accessKeyId}/{timestamp}/{expirationInSeconds}。其中{expirationInSeconds}建议设为300(5分钟),过期时间从timestamp开始计算。
在同一Header中追加X-Bce-Date: {timestamp}(UNIX时间戳整数,单位秒),该值必须与签名中使用的timestamp完全一致,差一点都会导致校验失败。
最后,在Header中加入X-Bce-Nonce: {nonce}。nonce为任意长度不超过128字符的随机字符串,每次请求必须唯一。重复使用nonce会触发防重放拦截,接口同样不予放行。
实用工具推荐
绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
选择画质和输出格式,预览压缩前后的大小。