You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Striga API创建用户时HMAC不匹配导致401认证错误求助

排查Striga API HMAC认证失败(401 "HMAC's did not match")的解决方案

以下是针对PHP环境下Striga API签名验证失败的核心排查点和解决步骤:

1. 确认HMAC签名生成的核心要素完全匹配API要求

Striga的HMAC签名通常基于请求方法、请求路径、时间戳、请求体四个关键部分生成,缺一不可且顺序严格:

  • 请求方法必须为大写POST,部分API对方法大小写敏感;
  • 请求路径需完全匹配(如/users和/users/会被视为不同路径,需严格对齐文档);
  • 时间戳需与请求头Timestamp的取值完全一致(通常为Unix时间戳,精确到秒,避免毫秒或格式差异);
  • 请求体必须是原始发送的JSON字符串,禁止使用JSON_PRETTY_PRINT等格式化参数,确保json_encode输出的字符串与实际发送内容完全一致。

2. 检查密钥与加密算法的正确性

  • 确认使用Striga控制台提供的Secret Key(而非API Key)生成签名,二者不可混用;
  • 加密算法必须为HMAC-SHA256,检查PHP代码中是否调用hash_hmac('sha256', $signString, $secretKey);
  • 密钥需完整复制,避免手动输入时遗漏空格或特殊字符。

3. 验证请求头的格式与完整性

  • Authorization头格式需严格遵循Striga要求,示例格式通常为Striga <API_KEY>:<HMAC_SIGNATURE>,禁止随意修改分隔符或前缀;
  • 确保Content-Type头设置为application/json,且请求体无JSON语法错误;
  • Timestamp头的取值必须与生成签名时使用的时间戳完全相同,避免时间差导致的验证失败。

4. PHP代码的具体排查点

  • 检查签名拼接逻辑是否符合Striga文档要求,示例正确拼接方式如下:
    $method = 'POST';
    $path = '/v1/users'; // 替换为实际接口路径
    $timestamp = time(); // 需与请求头Timestamp一致
    $requestBody = json_encode($userData); // 无额外格式化参数
    $signString = $method . $path . $timestamp . $requestBody;
    $hmac = hash_hmac('sha256', $signString, $yourSecretKey);
    
  • 避免对路径或请求体做不必要的URL编码,除非Striga文档明确要求。

5. 调试验证技巧

  • 打印生成签名的所有原始参数(方法、路径、时间戳、请求体)和最终HMAC值,用在线HMAC生成器手动验证是否匹配;
  • 使用抓包工具(如Charles)捕获实际请求,对比代码生成内容与实际发送内容的差异(重点排查编码、空格、换行符等细节)。

内容的提问来源于stack exchange,提问作者Daniel González Pitt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:22:18