我有一个设置为使用 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/