当前位置: 首页 > 知识库问答 >
问题:

无法验证webhook节点。js公司

锺离慈
2023-03-14

我正在尝试使用Node验证Patreon的webhook签名。js。这是我的代码:

const crypto = require("crypto");

...

function validateJsonWebhook(request) {
  const secret = SECRET_KEY_GIVEN_BY_PATREON;

  const hash = crypto.createHmac("md5", secret)
      .update(JSON.stringify(request.body))
      .digest("hex");

  if (request.header("x-patreon-signature") === hash) {
    return true;
  } else {
    return false;
  }
}

Patreon webhooks使用MD5-请参阅https://docs.patreon.com/#webhooks.

我已经多次验证了密钥,所以我知道这不是问题。

“request.header(“x-patreon-signature”)”和“hash”都返回了正确的格式(即它们都是32位字母数字的组合),但它们并不匹配。

知道发生什么事了吗?

共有1个答案

邓鸿彩
2023-03-14

所以@gaiazov的评论让我在Google上搜索了一下,这让我找到了Stripe verify web钩子签名HMAC sha254 HAPI上的前两条评论。卡尔·里德的jshttps://github.com/stripe/stripe-node/issues/331#issuecomment-314917167.

对于将来发现这一点的任何人:不要使用JSON。stringify(request.body)-使用request。取而代之的是rawBody,因为签名是基于原始JSON计算的。我觉得Patreon的文档中应该强调这一点,因为我发现的所有示例都使用了我最初发布的代码。我的新工作代码如下(我清理了末尾的“if(request.header(“x-patreon-signature”)===散列)”部分):

const crypto = require("crypto");

...

function validateJsonWebhook(request) {
  // Secret key given by Patreon.
  const secret = patreonSecret;

  const hash = crypto.createHmac("md5", secret)
      .update(request.rawBody)
      .digest("hex");

  return (request.header("x-patreon-signature") === hash);
}
 类似资料:
  • 我有一个JavaScript客户端和一个Node服务器。JS.我试图在客户端签署一个简单的文本,并将签名与公钥一起发送到服务器,然后服务器可以验证公钥。 客户端的任何东西都可以!但我无法在服务器端验证签名。我认为您没有必要阅读客户机代码,但为了保证,我也会提供它。 客户代码: 服务器代码(为此我使用express): 服务器控制台日志: 注: 我认为在服务器中正确导入了公钥,因为当我在服务器中再次

  • 我正在尝试为Authy OneTouch推送身份验证设置webhooks。我设法成功注册到事件,从订阅调用中保存网络钩子签名密钥,但我仍然无法验证请求:任何攻击者都可以伪造虚假请求并轻松绕过2FA检查。 API文档让我很困惑,因为回调请求与所提到的格式不匹配(尤其是它们没有X-Authy-Signature头),并且只有以下头: 我还尝试验证JWT令牌的签名,但仍然无效(传入的请求:):我总是得到

  • 问题内容: 我正在创建一个登录身份验证页面,用户将在其中输入活动目录的用户名和密码,并使用NodeJS进行检查,以查看其是否有效,但是我一直在获取 要么 当我尝试搜索用户名和密码时,我的代码如下: 我正在使用:https : //github.com/jeremycx/node-LDAP,假设用户输入的用户名是hhill 有人对我做错了什么建议吗? 更新 如果有人需要,这是我想出的解决方案,借助以

  • 我试图在我的Node.js网站上验证来自WooCommerce的网络钩子交易。但是我无法获得匹配的2个字符串。 我可以看到php签名是用以下代码生成的,源代码可以在这里查看WooCommerce源代码。 我注意到,如果我在上关闭,我可以让2个系统创建匹配,但是我宁愿不编辑WooCommerce的核心,所以我想知道是否有什么我在这里错过了? 在我的示例中,我确实编辑了核心,并强制有效负载如下,这样我

  • 我正在努力学习dialogflow教程。我已经设置了一个节点。js webhook,从Dialogflow调用,在我调用api的webhook代码中。但是,我的节点。js webhook说“错误:getaddrinfo ENOTFOUND”。当我在可视化代码中运行它时,它工作得很好,但当通过DialogFlow调用时,在nodejs webhook中找不到api。从Dialogflow调用它的事实

  • SCS English Version 子链是MOAC区块链中非常重要的一个模块。其主要目的在于分流母链中的业务逻辑,把一些比较繁琐的业务操作放在子链中执行。 子链由合约节点(Smart Contract Server - SCS)节点组成,必须部署在母链Vnode上。 子链支持分片,每个分片都能独立完成业务逻辑。 子链中的节点随机组合,支持动态增减。 同时,在主链上,我们增加了代理的Vnode节