You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js Twilio客户端库validateRequest在AWS Lambda中验证请求失败

解决Twilio Studio HTTP请求到AWS Lambda的签名验证失败问题

你遇到的问题根源在于:Twilio的validateRequest方法默认是为application/x-www-form-urlencoded类型的请求设计的,但你用了application/json的Content-Type,直接传JSON字符串会导致签名计算不匹配。

修复步骤及代码

  1. 先把Lambda收到的JSON字符串请求体解析为键值对对象
  2. 确保传入validateRequest的是解析后的对象,而非原始字符串
  3. 确认请求URL和Twilio调用时的完全一致(包括查询参数,若有)

修改后的代码如下:

const authToken = process.env.twilio_auth_token;
const client = require('twilio');

exports.handler = (event) => {  
  const twilioSignature = event.headers['x-twilio-signature'];
  // 解析JSON请求体为对象,这是验证的关键
  const requestBody = JSON.parse(event.body);
  // 注意:URL必须和Twilio发送请求时使用的完全一致,包括查询参数
  const requestUrl = 'https://my-function-url.io/';

  const requestIsValid = client.validateRequest(
    authToken,
    twilioSignature,
    requestUrl,
    requestBody
  );

  if (requestIsValid) {
    console.log('请求验证通过');
  } else {
    console.log('请求验证失败');
  }
};

额外注意事项

  • 确认authToken是Twilio账户的认证令牌,不要误用账户SID
  • 如果你的Lambda函数URL带有查询参数(比如https://my-function-url.io/?id=123),必须把完整的URL传入requestUrl,Twilio会将查询参数纳入签名计算
  • 检查Lambda的event.headers中是否正确获取到x-twilio-signature头(Lambda中HTTP头键通常为小写)
  • Twilio计算签名时会对所有参数按字母顺序排序,确保解析后的JSON对象没有多余或缺失的字段

内容的提问来源于stack exchange,提问作者jipchik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:10:30