试图嘲笑github webhook请求,得到:“X-Hub-Signature不匹配blob签名”
这是一个小代理服务器设置来处理github webhooks:
require('dotenv').config(); var http = require('http'); var createHandler = require('github-webhook-handler'); var handler = createHandler({ path: '/webhook', secret: process.env.GIT_WEBHOOK_SECRET }); http .createServer(function(req, res) { handler(req, res, function(err) { res.statusCode = 404; res.end('no such location'); }); }) .listen(8080); handler.on('error', function(err) { console.error('Error:', err.message); }); handler.on('push', function(event) { console.log( 'Received a push event for %s to %s', event.payload.repository.name, event.payload.ref ); }); handler.on('issues', function(event) { console.log( 'Received an issue event for %s action=%s: #%d %s', event.payload.repository.name, event.payload.action, event.payload.issue.number, event.payload.issue.title ); });
在邮递员,我有这些标头设置:
原始的身体在这里: https : //developer.github.com/v3/activity/events/types/#pullrequestreviewevent
这是我的预先请求脚本:
var payload = request.data; console.log("Using payload as " + payload) var hash = CryptoJS.HmacSHA1(payload, environment.secret).toString(CryptoJS.enc.Hex) postman.setGlobalVariable("signature", hash);
我可以确认GIT_WEBHOOK_SECRET
中的GIT_WEBHOOK_SECRET与我的邮递员环境设置中secret
设置的相同。
您需要使用sha1
字段将X-Hub-Signature
内容设置为参数:
var payload = request.data; console.log("Using payload as " + payload) var hash = CryptoJS.HmacSHA1(payload, environment.secret).toString(CryptoJS.enc.Hex) postman.setGlobalVariable("signature", "sha1=" + hash);
从validation来自Github的有效载荷 :
无论使用哪种实现,哈希签名都以sha1 =开头,使用秘密令牌的密钥和有效内容主体。
- 由于crypto.DEFAULT_ENCODING ='binary',节点6升级导致aws-sdk的SignatureDoesNotMatch错误。
- 使用phpseclib使用AES进行encryption,并使用CryptoJS进行解密
- .NET和nodejs之间的AESalgorithm值差异,CryptoJS
- 用CryptoJS解密openssl AES
- CryptoJs不能解密我的NodeJS服务器上的URL
- 无法使用密钥对validationNode.js Crypto的签名
- crypto-js如何隐藏类方法?
- Javascriptencryption库不能encryption和解密一个简单的例子程序中的string
- 节点密码和encryption-jsencryption和解密之间的兼容性