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

求助:AWS Lambda无法获取Twilio Studio Flow调用方来源URL

解决Twilio Studio Flow调用Lambda时的请求验证问题

核心说明

Twilio生成X-Twilio-Signature签名时,依赖的是你的Lambda公网访问URL(即你在Twilio Flow里配置的调用地址),而非Twilio的发起请求URL。你不需要获取Twilio的来源站点URL,只需确认你的Lambda公网地址即可完成验证。

方案1:通过环境变量配置Lambda URL(推荐)

这种方式不受请求头缺失影响,最可靠:

  1. 登录AWS Lambda控制台,进入目标函数的「配置」-「环境变量」
  2. 添加环境变量(例如TWILIO_WEBHOOK_URL),值填写你的Lambda公网URL(如https://my-lambda.com/id=1)
  3. 在代码中读取该变量:
    public async Task<APIGatewayHttpV2ProxyResponse> FunctionHandlerAsync(APIGatewayHttpApiV2ProxyRequest request, ILambdaContext context)
    {
        var callerUrl = Environment.GetEnvironmentVariable("TWILIO_WEBHOOK_URL");
        // 注意:确保环境变量已正确配置,避免空值
        if (string.IsNullOrEmpty(callerUrl))
        {
            // 处理配置缺失的情况
        }
        bool isFromTwilio = validator.Validate(callerUrl, querystrings, twilioSignature);
        // 后续逻辑
    }
    

方案2:从API Gateway请求头重构URL

如果API Gateway已配置传递转发头,可通过以下方式拼接完整URL:

public async Task<APIGatewayHttpV2ProxyResponse> FunctionHandlerAsync(APIGatewayHttpApiV2ProxyRequest request, ILambdaContext context)
{
    // 从转发头获取协议和主机
    var proto = request.Headers.TryGetValue("x-forwarded-proto", out var protoVal) ? protoVal : "https";
    var host = request.Headers.TryGetValue("x-forwarded-host", out var hostVal) ? hostVal : string.Empty;
    
    // 拼接路径和查询参数
    var path = request.RawPath;
    var query = string.IsNullOrEmpty(request.RawQueryString) ? "" : $"?{request.RawQueryString}";
    
    var callerUrl = $"{proto}://{host}{path}{query}";
    bool isFromTwilio = validator.Validate(callerUrl, querystrings, twilioSignature);
    // 后续逻辑
}

注意:需确保API Gateway未移除x-forwarded-proto、x-forwarded-host等头,可在API Gateway的集成请求配置中检查头的保留规则。

额外验证注意事项

  • 确保验证器正确实现Twilio的HMAC-SHA1签名算法:以你的Twilio Auth Token为密钥,将请求URL(含查询参数)与排序后的请求参数拼接后生成签名,再与X-Twilio-Signature对比。
  • 若为POST请求,需正确解析application/x-www-form-urlencoded格式的请求体参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:00:23