如何验证 webhook 的请求是否来自 Telegram?

ami*_*dar 4 telegram telegram-bot telegram-webhook telegram-api

我有一个 Telegram 机器人,它设置为与 Telegram webhook 机制配合使用,但如何信任请求并知道它们是否来自 Telegram?

根据 Telegram 文档,我发现有两种方法:

  • 将它们限制为 telegam ip(这很脏,如果出于某种原因 telegam 更改其 ip,我的机器人将关闭,因此这不是一个选项)
  • 为 webhook 设置一个私有长 url,这样只有我的服务器和 telegram 知道该 url(我认为这不是一个足够好的解决方案来保护我的 webhook,如果由于某种原因我的 url 泄漏,则 url 是公开的,每个人都可以假装他们是 telegram,并且发送虚假请求)

这两个是我发现的,有什么我想念的吗?为什么 Telegram 不为其 Webhook 提供像 OAuth2 这样的 rsa 公钥或像 Github 这样的可信令牌或签名?私人网址足以保证安全吗?

Jor*_*eña 9

从Bot API 6.1开始,secret_token该方法有一个新的可选字符串参数setWebhook

\n
\n

要在每个 Webhook 请求中的标头 \xe2\x80\x9cX-Telegram-Bot-Api-Secret-Token\xe2\x80\x9d 中发送的秘密令牌,1-256 个字符。仅允许使用字符 AZ、az、0-9、_ 和 -。该标头可用于确保请求来自您设置的 Webhook。

\n
\n

因此,您可以在设置 Webhook 时传递此参数,然后在每个传入请求上验证标头是否X-Telegram-Bot-Api-Secret-Token匹配。

\n