场景:不使用官方 SDK,自己用 Python 的 requests 直接调用腾讯云 API,签名方法为 TC3-HMAC-SHA256,调用的是某个产品的查询类接口,请求方式 POST,内容类型 application/json。 现象: 1. 接口返回 AuthFailure.SignatureFailure,提示签名失败,没有更多细节。 2. 同一套密钥用官方 SDK 调用同一个接口可以成功,说明密钥和权限没有问题。 3. 偶尔相同的代码在不同机器上结果不一致,有的成功,有的失败。 已尝试: 1. 对照官方文档逐步实现了规范请求串、待签名字符串、派生签名密钥三个步骤。 2. 检查了时间戳,使用 int(time.time()),不确定服务器时间偏差多大会导致失败。 3. 不确定请求头参与签名的列表是否必须与实际发送的请求头完全一致,也不确定请求体里有中文或有空格的格式化会不会影响哈希。 想请教: 1. TC3 签名中最容易出错的几个点是什么?比如规范请求串里请求头的小写、顺序、末尾换行,请求体的哈希是否要对原始字节计算。 2. 签名用的日期是 UTC 日期还是本地日期?时间戳和凭证范围里的日期不一致会怎样? 3. 有没有办法在本地打印中间结果,并和官方 SDK 或在线签名工具的中间值逐步对比,快速定位是哪一步不同? 4. 为什么不同机器会有差异?是否与系统时间、时区或请求体序列化方式有关?
相似问题