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

Forge Webhooks回调负载签名验证失败,寻求技术解决方案

Forge Webhook签名验证不一致的排查与解决

我之前对接Forge Webhooks时也碰到过一模一样的坑!明明密钥和Forge后台注册的完全一致,本地用C#、在线HMAC工具、官方Node.js示例计算的哈希都能对上,但就是和Forge返回的签名不匹配,合法请求被拦下来真的让人头大。结合我的踩坑经验,给你几个核心排查方向:

最可能的问题:请求体被重复读取导致内容不全

ASP.NET(Core)里的request.Body是只能读取一次的流,如果你的项目里有日志中间件、模型绑定逻辑提前读取过请求体,那你这里request.Body.ReadAsBytes()拿到的就不是完整的原始请求内容——基于错误内容计算的哈希,自然和Forge的签名对不上。

解决方法是先把请求体缓存到内存流,确保拿到完整的原始数据:

private const string SHA_HASH = "sha1hash";

// 先缓存请求体,避免流被读取后无法获取原始内容
using var memoryStream = new MemoryStream();
await request.Body.CopyToAsync(memoryStream);
memoryStream.Position = 0; // 重置流位置到开头
var bodyBytes = memoryStream.ToArray();

// 计算哈希
var secretKeyBytes = Encoding.UTF8.GetBytes(ForgeAuthConfiguration.AntiForgeryToken);
using var hmac = new HMACSHA1(secretKeyBytes);
var computedHash = hmac.ComputeHash(bodyBytes);
// 用BitConverter转换十六进制字符串,比Aggregate更简洁不易出错
var computedSignature = $"{SHA_HASH}={BitConverter.ToString(computedHash).Replace("-", "").ToLowerInvariant()}";

其他需要排查的细节

  • 密钥准确性:再仔细核对一遍密钥——有没有多余的空格、换行符?Forge的密钥是大小写敏感的,复制时别漏了首尾字符。
  • 哈希算法匹配:确认Forge Webhook配置里的签名算法是SHA1(对应代码里的HMACSHA1)。如果不小心选了SHA256,要把代码改成HMACSHA256,同时前缀改成sha256hash。
  • 请求体编码:Forge默认用UTF-8编码发送请求体,但可以再确认下——如果编码不匹配,转成字节数组时会直接导致哈希错误。

验证小技巧

用抓包工具(比如Fiddler、Charles)获取Forge发送的原始请求体,把它和你的密钥一起放到在线HMAC生成器计算:

  • 如果结果和Forge的签名一致,说明问题肯定出在代码读取请求体的环节;
  • 如果还是不一致,就要重新检查密钥或者算法配置了。

内容的提问来源于stack exchange,提问作者Marian Simonca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:37:43