我有一个谷歌云函数,Twilio可以向它发送带有短信状态的POST请求,但我无法使用https://www.twilio.com/docs/usage/security中列出的任何方法验证这些请求是否来自Twilio
我的第一次尝试是使用validateRequest函数,如下面的代码所示
const twilio = require('twilio');
let url = 'https://....cloudfunctions.net/...'
let token = 'XXXX';
let header = request.headers['x-twilio-signature'];
let sortedKeys = Object.keys(request.body).sort();
let sortedParams = {};
sortedKeys.forEach(key => {
sortedParams[key] = request.body[key];
});
let validated = twilio.validateRequest(token, header, url, sortedParams);我确认token的值与Twilio帐户设置中的身份验证令牌匹配,sortedParams包含按字母顺序排序的以驼峰为大小写的Twilio请求参数,url与创建短信时传递给Twilio客户端的url匹配。但是,validateRequest总是返回false。
我的下一次尝试是通过从https://www.twilio.com/docs/libraries/reference/twilio-node/3.18.0/webhooks_webhooks.js.html复制代码来散列url和请求参数的组合
const crypto = require('crypto')
sortedKeys.forEach(key => {
url = `${url}${key}${request.body[key]}`;
});
let signature = crypto
.createHmac('sha1', token)
.update(Buffer.from(url, 'utf-8'))
.digest('base64');在将签名的值与头部的值进行比较时,两者始终不匹配。
https://stackoverflow.com/questions/51372600
复制相似问题