签名验证失败的底层原因是客户端signature字段与服务端重算值不匹配,导致直接返回401且不解析参数;根源在于签名原文拼接顺序错误(uri+"&"+timestamp+"&"+signaturenonce)、timestamp非毫秒整数、signaturenonce非去横线uuidv4、secretkey误用、hmac-sha1被替换成sha256、或请求体json格式/unicode字符不一致。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

签名验证失败的底层原因
LiblibAI API签名验证失败不是网络问题或账号异常,而是请求头中Signature字段与服务器端重新计算出的签名值完全不匹配,系统直接拒绝该请求并返回401错误——此时连参数解析环节都不会触发。
检查签名原文拼接是否合规
签名原文必须严格按URI路径+“&”+Timestamp+“&”+SignatureNonce顺序拼接,**缺一不可,顺序错一位即失效**。例如调用/api/generate/webui/text2img接口,URI部分必须是纯路径“/api/generate/webui/text2img”,不能带协议、域名、查询参数或末尾斜杠。
Timestamp必须为毫秒级整数字符串(如“1726842035123”),若误用秒级时间戳或含小数点,服务器校验时会直接截断导致签名不一致。
SignatureNonce必须是UUID v4格式且去除所有短横线(如“a1b2c3d4e5f678901234567890abcdef”),重复使用同一nonce会被风控拦截,返回403而非401。
排查HMAC-SHA1计算过程中的典型错误
方法一:确认密钥使用SecretKey而非AccessKey参与计算。SecretKey是base64编码前的原始二进制密钥,不能误用其base64字符串本身。
方法二:检查HMAC输入是否进行了URL安全Base64编码。正确做法是先对HMAC.digest()结果做urlsafe_b64encode,再.rstrip(b'=')并.decode();若漏掉rstrip或用了标准base64encode,会导致末尾填充字符差异。
方法三:验证签名算法是否误用SHA256。LiblibAI明确要求HMAC-SHA1,用SHA256生成的签名永远无法通过校验,即使其他所有参数都正确。
确认请求体JSON是否污染签名原文
签名原文中不包含请求体,但请求体内容会影响签名计算的完整性——因为签名原文虽不含body,但body必须与签名时用于构造sign_str的body_str完全一致。若Python中用json.dumps(body, indent=2)生成带换行和缩进的JSON,而签名时用的是无格式版本,两者body_str不同,最终签名必然失败。
这一步最容易被忽略:body内字符串值中若含中文逗号、全角空格、不可见Unicode字符(如\u200b零宽空格),会导致body_str哈希值变化,签名失效。建议用在线JSON格式化工具粘贴后手动清理空白符。
【务必确保json.dumps(body, separators=(',', ':'))输出的字符串与签名计算时使用的完全相同】
验证请求头与查询参数是否完整携带
第一步:确认请求URL中已拼入AccessKey、Signature、Timestamp、SignatureNonce四个查询参数,缺任意一个都会跳过签名校验直接报400。
第二步:检查HTTP请求头Content-Type是否设为application/json,缺失该头会导致body无法被正确解析,签名原文比对失去意义。
第三步:确认Authorization头未被意外添加。LiblibAI不认Bearer Token类认证,加了反而干扰签名流程,引发401。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











