【发布时间】:2021-05-19 06:30:03
【问题描述】:
我正在尝试验证 Github webhook secret,但是每次我在 Github 中触发事件时,req.headers['x-hub-signature']) 的值都会发生变化,这没有意义。
NodeJs: sha1=b57ad18e45f71ac069d15618f6ca547ed75bb2e9
Github: sha1=0b6ff08d557b240dbadedb2a0c1054ce69f2d93e <----
NodeJs: sha1=b57ad18e45f71ac069d15618f6ca547ed75bb2e9
Github: sha1=15e3d5edae00951abb180e9eaea9a6278d8f8d0b <----
请注意,来自 Githit hub 的秘密每次都不同!
我找到了其他人验证了这个秘密,但我看不出他们的代码与我的代码有何不同。
- https://humanwhocodes.com/snippets/2020/08/validate-github-webhook-signature-nodejs/
- https://gist.github.com/kiewic/a419b8e47b3baf9a301dee598d6ade87
- HMAC Signature doesn't match x-hub-signature from github
- https://gist.github.com/stigok/57d075c1cf2a609cb758898c0b202428
问题
谁能弄清楚为什么我在每次活动中从 Github 获得不同的秘密?还是我做错了什么?
const express = require("express");
const bodyParser = require("body-parser");
const crypto = require('crypto');
const secret = "x";
const app = express();
const PORT = 8080;
app.use(bodyParser.json());
app.post("/", (req, res) => {
let sig = "sha1=" + crypto.createHmac('sha1', secret).digest('hex');
console.log('NodeJs: ' + sig);
console.log('Github: ' + req.headers['x-hub-signature']);
res.status(200).end();
});
app.listen(PORT, () => console.log(`Github wekhook listening on port ${PORT}`));
【问题讨论】:
-
您链接到的代码 是 不同的,它们从环境(
WEBHOOK_SECRET,对于 GitHub)中获得可比较的值,而不是硬编码它。这也使他们的代码更安全地共享,您通常应该不将令牌放入版本控制中。 -
@jonrsharpe 我的代码只是一个 PoC,所以我可以理解发生了什么。你能修改我的代码以使用
WEBHOOK_SECRET吗?我不明白其中的区别。 -
看看你发布的第一个例子,它准确地展示了如何访问和使用环境变量。
-
所以您是在谈论秘密的安全解析?是的,这是个好主意,但 OP 是关于为什么我在每次活动中都从 Github 获得不同的秘密。
-
GitHub 主动检测源代码中包含的令牌,并撤销它们。请参阅 Web UI 中的“安全”选项卡。
标签: javascript node.js github ecmascript-6 webhooks