无法验证 Twitch EventSub 签名

问题描述

所以我一直在为 Streamlabs chatbot 构建自己的高级脚本有一段时间了,我已经到了需要通过 EventSub 访问 Twitch webhook 的地步。我遇到的问题是我一生都无法弄清楚如何验证返回的签名。

Twitch 文档 (https://dev.twitch.tv/docs/eventsub#verify-a-signature) 说:

签名使用 HMAC-SHA256。 HMAC 密钥是您订阅的秘密。 HMAC 消息是 Twitch-Eventsub-Message-Id 标头、Twitch-Eventsub-Message-Timestamp 标头和请求正文的原始字节的串联。

然后给出一些伪代码使用:

hmac_message = headers['Twitch-Eventsub-Message-Id'] + headers['Twitch-Eventsub-Message-Timestamp'] + request.body
signature = hmac_sha256(webhook_secret,hmac_message)
expected_signature_header = 'sha256=' + signature.hex()

if headers['Twitch-Eventsub-Message-Signature'] != expected_signature_header:
    return 403

这段代码会很棒,但我不知道 hmac_sha256() 函数应该是什么。我的 IDE 无法识别它。

我尝试了许多其他计算签名的方法,但每次都得到错误计算的签名。所以基本上我只需要实际弄清楚如何使用 sha256 哈希计算 Twitch 签名。

解决方法

如果您查看 twitch 文档,他们提供的示例是伪代码,而不是要运行的实际代码。

这篇文章有一个验证签名的例子,应该足以让你弄清楚这一点。

https://discuss.dev.twitch.tv/t/verifying-signature-mismatch-python-and-i-dont-know-why/32112

如果您仍然无法弄清楚,请告诉我,我会为您发布一个示例。