【问题标题】:How to prevent unauthorized access of an API created for Twilio webhook如何防止未经授权访问为 Twilio webhook 创建的 API
【发布时间】:2020-03-28 02:45:57
【问题描述】:

我必须使用 AWS lambda 函数处理 Twilio 帐户的所有入站消息并将其转发到另一个号码。因此,我使用 Amazon API Gateway 创建了一个 POST API,并在 Twilio SMS webhook 配置上对其进行了配置。对于任何入站 SMS,Twilio 正在创建一个事件并调用 API。 API Gateway 依次调用 Lambda 函数。一切正常。 但问题是,据我所知,Twilio 仅支持 webhook 的公共 API。所以,我必须保持 API 公开。我正在寻找一些方法来防止未经授权的访问。

我研究了两种方法 -

  1. 将 Twilio IP 范围列入白名单:这似乎是不可能的,因为 Twilio 的 IP 地址是可变的。

  2. 验证请求来自 Lambda 函数内部的 Twilio: Twilio 文档也建议采用这种方法 - https://www.twilio.com/docs/usage/security。但是这样一来,每次都必须执行 Lambda 函数,即使是无效请求也是如此。

所以,我想知道是否有任何其他方法可以在不执行 Lambda 函数的情况下防止未经授权的访问。

【问题讨论】:

  • 为什么不使用 Twilio 函数?它内置了这个功能。
  • @Alan 感谢您的回复。我不使用 Twilio 函数有几个原因。 1.它只支持Node js,我必须使用Golang。 2. 它目前作为测试版提供。 3. 我正在使用 AWS Lambda 免费套餐,所以,我不想花钱购买 Twillio 功能。

标签: amazon-web-services aws-lambda twilio aws-api-gateway


【解决方案1】:

Twilio 将使用X-Twilio-Signature HTTP 标头对您的应用程序的所有入站请求进行签名。

Twilio 使用在 webhook 中发送的参数(GET 或 POST)以及您的应用程序提供给 Twilio 的确切 URL 来创建此签名。签名使用 HMAC-SHA1 散列算法,将您的 Twilio 帐户的身份验证令牌作为密钥。

您的应用程序可以使用服务器端 Twilio SDK(validateRequest 方法)或实施您自己的验证器(see this page)来验证此签名是否正确。您将需要帐户的身份验证令牌、Twilio 传递给您的 X-Twilio-Signature HTTP 标头的值、Twilio 将 webhook 发送到的 URL 以及 Twilio 发送的所有参数。

【讨论】:

  • 感谢您的回答。我也想知道这是否是唯一的授权方式。我试图避免这种方式,因为即使对于会影响账单的无效请求,也必须执行此 Lambda。是否可以从 API 网关本身进行授权?
  • 您可以enable request validation in API Gateway(这可以防止 Lambda 在请求无效时运行),但我认为它不允许您实现自定义验证逻辑。您可以创建基本验证,例如确保包含 X-Twilio-Signature HTTP 标头且非空白。如果我帮助了你,请接受我的回答:)
  • 对,我还没有想到。谢谢。此外,我正在探索 [Lambda Authorizer][1] 在调用实际 Lambda 之前进行授权。除此之外,我还可以启用Request Validation 在调用Lambda Authorizers 之前过滤请求。 [1]:docs.aws.amazon.com/apigateway/latest/developerguide/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 2012-09-15
  • 2016-08-12
相关资源
最近更新 更多