微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过签名验证 Shipwire Webhook

如何解决通过签名验证 Shipwire Webhook

我似乎无法验证 Shipwire 的签名。我已经检查过,论坛等中的大多数示例似乎都有效,但它不适用于 Shipwire,我想知道是否有人有处理 Shipwire 的经验。基本上代码状态

X-Shipwire-Signature: abc123;secret-id=2
The hash value is the HMAC-SHA256 of the unaltered POST request body

所以对我的代码进行了简单的检查,我首先通过他们的 api 注册一个秘密并得到了结果,将其存储在 Rails 凭据中

"resource":{"id":796,"secret":"cbfbf1dc131cd590ed04f5d2c80651f...",

所以在我的控制器中我做了以下

webhook_secret = Rails.application.credentials.shipwire[:webhook_secret]
data = request.raw_post
result = OpenSSL::HMAC.hexdigest("sha256",webhook_secret,data)

但结果与他们返回的签名不匹配,远非如此。

解决方法

好的,所以我终于解决了它,对于那些在 Shipwire 上工作的人,因为我将发布的文档不多。

基本上,您需要将注册的密钥转换为二进制并将其用作哈希匹配的密钥,我没有时间正确编写代码,但我能够通过快速脏代码进行验证>

shipwire_sig = request.headers["HTTP_X_SHIPWIRE_SIGNATURE"]
key = webhook_secret.scan(/../).map { |x| x.hex.chr }.join
signature = OpenSSL::HMAC.hexdigest("sha256",key,data)
shipwire_sig == signature

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。