我们正在试图验证我们接收到的SurveyMonkey hmac (sm-签名)是否正确.为了检查这一点,我们创建了一个hmac,并将其与SurveyMonkey的hmac进行比较。
我们创建hmac如下(我们正在与nodejs合作):
let bodyString = JSON.stringify(req.body);
let body = Buffer.from(bodyString, "ascii");
let apiClientId = Buffer.from(surveyMonkeyClientId, "ascii");
let apiSecret = Buffer.from(surveyMonkeyApiSecret, "ascii");
let hmac = crypto
.createHmac('sha1', apiClientId+'&'+apiSecret)
.update(Buffer.from(body))
.digest()
.toString('base64');我们已经用(使用python):https://github.com/SurveyMonkey/public_api_docs/blob/main/includes/_webhooks.md验证了这段代码
但出于某种原因,这并不像预期的那样有效。因为我们生成的hmac不同于由SurveyMonkey (sm-签名)生成的hmac。
有人能帮我们吗?谢谢!
发布于 2022-03-30 11:06:30
问题在于签名,即json字段之间的空格,当您执行JSON.stringify时,这会移除空格。
一个可能的解决办法是:
let payloadString = JSON.stringify(req.body);
payloadString = payloadString.replace(/":/g, '": ');
payloadString = payloadString.replace(/,/g, ', ');https://stackoverflow.com/questions/71659648
复制相似问题