telegram - 如何验证来自 Telegram 的 webhook 请求?

标签 telegram telegram-bot telegram-webhook telegram-api

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

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

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

这两个是我发现的有什么我想念的吗?为什么 Telegram 不为其 webhook 提供像 OAuth2 这样的 rsa 公钥或像 Github 这样的可信 token 或签名?私有(private) url 是否足以保证安全?

最佳答案

截至Bot API 6.1 , setWebhook 有一个新的可选 secret_token 字符串参数方法:

A secret token to be sent in a header “X-Telegram-Bot-Api-Secret-Token” in every webhook request, 1-256 characters. Only characters A-Z, a-z, 0-9, _ and - are allowed. The header is useful to ensure that the request comes from a webhook set by you.

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

关于telegram - 如何验证来自 Telegram 的 webhook 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69882004/

相关文章:

telegram-bot - 后台持续访问用户的实时位置

nginx - 无法在 Telegram bot webhook 中使用 Let's Encrypt 证书(自签名证书工作正常)

node.js - 从我已加入Node.js的 Telegram channel 获取更新

ios - Telegram新源代码APP ID问题(CONNECTION_API_ID_INVALID)

c# - 我如何在 Telegram Bot 中不使用 "CallbackData"的情况下回答 "AnswerCallbackQueryAsync"(C#)

c# - 电报机器人 : GetUpdates Conflict

botframework - 如何在 Telegram BotFather 中设置创建的游戏的 Url?

telegram - 如何找出它是用户的当前位置还是在 map 上选择的地点

python - Telegram Bot 如何在 curl 中设置解析模式?

java - 如何让 TelegramBot 持续工作,而不需要一直手动启动我的 Java 程序?