飞书Webhook签名验证过程中,如何从踩坑到填坑?
摘要:作为一名勤劳的牛马,我在对接飞书开放平台时遇到了一个看似简单却让人抓狂的问题——签名验证总是失败。经过一番深入研究,我发现这个问题背后隐藏着许多容易被忽视的细节。今天,我想用最通俗的语言,把这段经历记录下来。 故事的开始:一个神秘的签名验证
作为一名勤劳的牛马,我在对接飞书开放平台时遇到了一个看似简单却让人抓狂的问题——签名验证总是失败。经过一番深入研究,我发现这个问题背后隐藏着许多容易被忽视的细节。今天,我想用最通俗的语言,把这段经历记录下来。
故事的开始:一个神秘的签名验证失败
问题现场
那是一个普通的工作日下午,我正在为公司的内部系统对接飞书的事件订阅功能。一切看起来都很顺利:
✅ 应用创建完成
✅ 事件订阅配置完成
✅ Webhook 地址填写正确
✅ 代码部署上线
但是,当我满怀期待地在飞书后台点击"验证"按钮时,系统日志里出现了这样一行红色的错误:
warn: Mud.Feishu.Webhook.FeishuEventValidator[0]
请求头签名验证失败: 计算 +OGVt6ye......, 期望 bc5b503a......
什么?签名验证失败?
我检查了配置文件,密钥都填对了;我检查了代码逻辑,看起来也没问题。但就是验证不通过!
初步分析
让我们先看看日志里的其他信息:
dbug: Mud.Feishu.Webhook.FeishuEventDecryptor[0]
解密成功,结果长度: 489
dbug: Mud.Feishu.Webhook.FeishuEventDecryptor[0]
解密后的JSON数据: {"schema":"2.0","header":{"event_id":"...","token":"fCt8xobp..."}}
info: Mud.Feishu.Webhook.FeishuEventDecryptor[0]
事件数据解密成功 - EventType: [contact.department.created_v3]
有意思的是:
✅ 数据解密成功了
✅ 事件类型识别正确
❌ 但签名验证失败了
这说明什么?说明我的 Encrypt Key(加密密钥)是对的,但签名验证的逻辑肯定哪里出了问题。
飞书 Webhook 的安全机制
在深入问题之前,让我们先理解飞书是如何保护 Webhook 安全的。
